使用内部联接更新查询[更新了0行]

时间:2015-04-09 18:22:04

标签: sql sql-server sql-server-2008 sql-update inner-join

更新table1中的数据inner join返回O row updated时,表中的数据都在不同的数据库中。我有另外的方法来更新这个,但我不知道我的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

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

4 个答案:

答案 0 :(得分:1)

您的语句中有一些语法错误。在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')

答案 1 :(得分:1)

在您的第一个查询中,您无法使用:

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

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

并在第二个中告诉你:

UPDATE DB1.table1 SET column3= ...

你已经使用了表和列的实际名称,这里没有任何错误,代码工作正常。

那么当您使用别名然后尝试在更新部分使用它时 OR 在任何地方使用实际名称,下面的两个查询应该适合您:

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'

答案 2 :(得分:0)

您正在更新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')

答案 3 :(得分:0)

这是您需要用于SQL Server的语法:

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')