我正在使用此查询获取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)
我会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)
那应该适合你