使用内连接更新查询 [0 行已更新]

update query with inner join [0 rows updated]

虽然更新 table1 中的数据并返回 inner join O row updated,但 table 都在不同的数据库中。我有替代方法来更新它,但我不知道为什么我的 INNER JOIN 查询出错了。

不使用内部联接

UPDATE DB1.table1 
SET t1.column3='value3' 
from DB1.table1 t1 
INNER JOIN DB2.table2 t2 on t1.column2=t2.column2 
WHERE (t1.column1 = 'value1')
AND (t2.column3 = 'value3')

不使用内部联接的工作查询。

UPDATE DB1.table1 SET column3='value3' WHERE (column1 = 'value1')
AND (column3 = 'value3') AND (column2 in (select column2 from DB2.table2
where column3='value3' and column3='value3' and column4='value4'))



DB1..table1
column1 column2 column3 column4
c1  c2  c3a c4
c1  c2  c3a c4
c1  c2  c3b c4
c1  c2  c3b c4

DB2..table2
column1 column2 column3 column4
c1  c2  c3a c4
c1  c2  c3a c4
c1  c2  c3b c4

任何人都可以提出这个建议吗?

您正在更新 DB1.table1 但设置列 t1.Column3 这就是为什么您没有更新任何行的原因

你应该这样做

UPDATE DB1.table1 
SET DB1.table1.column3='value3'
FROM DB1.table1 t1
INNER JOIN DB2.table2 t2 on t1.column2= t2.column2 
WHERE (t1 .column1 = 'value1')
AND (t2.column3 = 'value3')

您的语句中存在一些语法错误。在 SET 和 UPDATE 部分使用别名或使用 TableName,不要混用:

UPDATE t1
SET column3='value3' 
from DB1.table1 t1 
INNER JOIN DB2.table2 t2 on t1.column2=t2.column2 
WHERE (t1.column1 = 'value1')
AND (t2.column3 = 'value3')

这是您需要用于 SQL 服务器的语法:

UPDATE t1 SET 
t1.column3 = 'value3' 
FROM DB1.table1 t1
INNER JOIN DB2.table2 t2 ON t1.column2 = t2.column2 
WHERE 
(t1.column1 = 'value1') AND 
(t2.column3 = 'value3')

在您的第一个无效查询中,您有:

UPDATE DB1.table1 
SET t1.column3='value3'
.
.
.

您提到 update 的 table 的实际名称,但在 set 声明中您使用了 alias,因此存在混淆。

在第二个你告诉:

UPDATE DB1.table1 SET column3= ...

您使用了 table 和列的实际名称,这里没有任何问题,代码工作正常。

所以当你使用别名然后尝试在更新部分使用它在任何地方使用实际名称,下面的拖车查询应该适合你:

UPDATE DB1.table1 
SET DB1.table1.column3=DB2.table2.column3  
FROM DB1.table1
JOIN DB2.table2 ON DB1.table1.column2=DB2.table2.column2 
                AND DB1.table1.column1 = 'value1'
                AND DB2.table2.column3 = 'value3'

UPDATE t1 
SET t1.column3=t2.column3  
FROM DB1.table1 t1
JOIN DB2.table2  t2 ON t1.column2=t2.column2 
                    AND t1.column1 = 'value1'
                    AND t2.column3 = 'value3'