尝试使用mysql更新其他表中的列

Jay*_*266 6 mysql

我正在使用此查询获取1000条数据记录:

SELECT
     RIGHT(tagarr, LENGTH(tagarr) - LENGTH('encoder:')) enc, mo.src_ip, mo.datacenter
FROM
    logical_service ls, mpeg_out mo, UNNEST(ls.tags) AS tagarr
WHERE
    tagarr LIKE 'encoder:%'
    AND mo.lid = ls.lid
Run Code Online (Sandbox Code Playgroud)

这将创建3列数据,如下所示:

encoder | src_ip | datacenter
Run Code Online (Sandbox Code Playgroud)

然后我有一个encoder包含字段的表

encoder | output_source_ip | datacenter
Run Code Online (Sandbox Code Playgroud)

output_source_ip主要为null,因此,encoder如果编码器和数据中心上的选择与编码器和数据中心匹配,我想用src_ip 更新表上的该列。

知道我该怎么做吗?这是我尝试做的尝试,但肯定被打破了:

UPDATE encoder 
    SET output_source_ip = (
SELECT
     RIGHT(tagarr, LENGTH(tagarr) - LENGTH('encoder:')) encoder, mo.src_ip, mo.datacenter
FROM
    logical_service ls, mpeg_out mo, UNNEST(ls.tags) AS tagarr
WHERE
    tagarr LIKE 'encoder:%'
    AND mo.lid = ls.lid
);
Run Code Online (Sandbox Code Playgroud)

Tar*_*ani 4

我会WITH在其中使用声明让事情看起来更干净

WITH 
source_data as (
SELECT
     RIGHT(tagarr, LENGTH(tagarr) - LENGTH('encoder:')) enc, mo.src_ip, mo.datacenter
FROM
    logical_service ls, mpeg_out mo, UNNEST(ls.tags) AS tagarr
WHERE
    tagarr LIKE 'encoder:%'
    AND mo.lid = ls.lid )

UPDATE encoder as en
    SET output_source_ip = (
    select src_ip from source_data as sd
    where sd.datacenter = en.datacenter and sd.encoder = en.encoder
)
Run Code Online (Sandbox Code Playgroud)

那应该适合你