根据另一个 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”替换为您的查询,它将起作用。