在SQL中,如何通过查找列相等的所有行来更新表的每一行,然后将另一列设置为等于另一列

hth*_*mos 8 mysql sql sql-server

所以基本上这将是伪代码,但我不知道如何在SQL中执行此操作,请帮忙.

for each row in table1{
    loop through each row in table 2 {
        if table1's row.column 1 = table2's row.column 2 for this row {
            set table1's row.col2 = table2's row.col2
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:好的,让我更具体一点.我们基本上从hibernate序列切换为id,使用guid作为id列.我正在尝试通过创建前一个外键列的临时更新相关的外键,然后匹配临时列以更新实际列.

假设表1有id,而表2有一列用于将这些id用作外键.我想使用表2中的先前值与表1中的行匹配,并设置表2中的键值以匹配表1的新guid.

所以表2可能有多行重复的id,但表1永远不会有重复.如果那有意义的话.

小智 14

在SQL Server中,您可以执行以下操作:

UPDATE Table_1
SET Column_2 = t2.Column_2
FROM Table_1 AS t1
INNER JOIN Table_2 AS t2 ON t2.Column_1 = t1.Column_1

或类似的东西

UPDATE Table_1
SET Column_2 = ( 
    SELECT t2.Column_2
    FROM Table_2 AS t2
    WHERE t2.Column_1 = Table_1.Column_1
)

当然,如果Table_2中有多行,则会出现错误....


Dam*_*ver 5

它的基本原理是:

UPDATE Table1 SET col2 =
     (select col2 FROM Table2 where Table2.column2 = Table1.column1)
Run Code Online (Sandbox Code Playgroud)

但是,如果两个表中的行之间没有 1-1 对应关系,那可能无法完全满足您的需求 - 因此我在您的问题下方发表了当前评论:

如果表 2 中有多个匹配行会发生什么情况?如果没有匹配的行会发生什么?