更新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
任何人都可以提出这个建议吗?
答案 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')