使用内连接更新查询 [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'
虽然更新 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'