根据另一个 table sql 更新 table 的多个列
Update multiple columns of table based on another table sql
我有两个 table:
表 1:
column1|column2|column3|column4|column5
---------------------------------------
'test1'| null | 12 |'old1' | 'gr1'
'test1'| 123 | null |'old2' | 'gr2'
'test2'| 488 | null |'old3' | 'gr3'
'test3'| 488 | null |'old4' | 'gr4'
表 2:(这是一个 SELECT 查询)
column1|column2|column4|column5
-------------------------------
'test1'| 999 | 'new1'| 'gr2'
'test3'| 1355 | 'new4'| 'gr4'
我创建了第二个 table 作为查询以更新第一个的值,其中第一个 table 的键是 (column1, column5)。所以我要的 table 是:
表 1:
column1|column2|column3|column4|column5
---------------------------------------
'test1'| null | 12 |'old1' | 'gr1'
'test1'| 999 | null |'new1' | 'gr2'
'test2'| 488 | null |'old3' | 'gr3'
'test3'| 1355 | null |'new4' | 'gr4'
这是怎么做到的?
你能试试吗
UPDATE table1 t1 set (column2,column4) = (
SELECT column2,column4
FROM table2 t2
WHERE t1.column1 = t2.column1 and t1.column5 = t2.column5
)
如果你有table2作为查询,你可以使用WITH
WITH table2 (column1,column2,column4,column5) AS (
<your select query>
),
UPDATE table1 t1 set (column2,column4) = (
SELECT column2,column4
FROM table2 t2
WHERE t1.column1 = t2.column1 and t1.column5 = t2.column5
)
exakt SQL 命令当然取决于生成第二个 table 的查询。假设此查询只是“SELECT * FROM yourtable2”,您可以执行以下更新命令来实现您的目标:
UPDATE yourtable
SET
column2 = x.column2,
column4 = x.column4
FROM (SELECT * FROM yourtable2) x
WHERE yourtable.column1 = x.column1
AND yourtable.column5 = x.column5
在这里你可以看到这是有效的(如果 table“你的table2”提供了正确的数据):db<>fiddle
因此,您可以将“SELECT FROM yourtable2”替换为您的查询,它将起作用。
我有两个 table:
表 1:
column1|column2|column3|column4|column5
---------------------------------------
'test1'| null | 12 |'old1' | 'gr1'
'test1'| 123 | null |'old2' | 'gr2'
'test2'| 488 | null |'old3' | 'gr3'
'test3'| 488 | null |'old4' | 'gr4'
表 2:(这是一个 SELECT 查询)
column1|column2|column4|column5
-------------------------------
'test1'| 999 | 'new1'| 'gr2'
'test3'| 1355 | 'new4'| 'gr4'
我创建了第二个 table 作为查询以更新第一个的值,其中第一个 table 的键是 (column1, column5)。所以我要的 table 是:
表 1:
column1|column2|column3|column4|column5
---------------------------------------
'test1'| null | 12 |'old1' | 'gr1'
'test1'| 999 | null |'new1' | 'gr2'
'test2'| 488 | null |'old3' | 'gr3'
'test3'| 1355 | null |'new4' | 'gr4'
这是怎么做到的?
你能试试吗
UPDATE table1 t1 set (column2,column4) = (
SELECT column2,column4
FROM table2 t2
WHERE t1.column1 = t2.column1 and t1.column5 = t2.column5
)
如果你有table2作为查询,你可以使用WITH
WITH table2 (column1,column2,column4,column5) AS (
<your select query>
),
UPDATE table1 t1 set (column2,column4) = (
SELECT column2,column4
FROM table2 t2
WHERE t1.column1 = t2.column1 and t1.column5 = t2.column5
)
exakt SQL 命令当然取决于生成第二个 table 的查询。假设此查询只是“SELECT * FROM yourtable2”,您可以执行以下更新命令来实现您的目标:
UPDATE yourtable
SET
column2 = x.column2,
column4 = x.column4
FROM (SELECT * FROM yourtable2) x
WHERE yourtable.column1 = x.column1
AND yourtable.column5 = x.column5
在这里你可以看到这是有效的(如果 table“你的table2”提供了正确的数据):db<>fiddle 因此,您可以将“SELECT FROM yourtable2”替换为您的查询,它将起作用。