我想批量更新同一个表中的某些行。我有一个表,比方说TABLEA,有Id
列和OriginalID
。我想编写一个内部联接与其他表的组合的查询:
Update TABLEA
SET OriginalID = Id
FROM TABLEA A
INNER JOIN TableB B ON <join condition>
INNER JOIN TableC C ON <join condition>
WHERE c.SomeCol = <value>
这适用于SQL Server 2005和Oracle,它提供了错误
SQL错误:ORA-00933:SQL命令未正确结束。
答案 0 :(得分:2)
其他解决方案:
可更新的观点:
UPDATE (SELECT OriginalID, ID FROM TABLEA A
INNER JOIN TableB B ON <join condition>
INNER JOIN TableC C ON <join condition>
WHERE c.SomeCol = <value>
)
SET OriginalID = Id;
您也可以使用MERGE语句。
MERGE INTO TableA USING
(SELECT <used columns, ids>
FROM TableB B
INNER JOIN TableC C ON <join condition>
WHERE c.SomeCol = <value>)
ON (<join condition beteen A and B>)
WHEN MATCHED THEN
UPDATE SET
OriginalID = ID;
答案 1 :(得分:1)
我相信你想要这样的东西。
UPDATE tableA a
SET OriginalID = (SELECT a2.id
FROM tableA a2
JOIN tableB b ON (<<join between a,b,and a2>>)
JOIN tableC c ON (<<join between b,and c>>)
WHERE c.SomeCol = <<value>>)
WHERE EXISTS( SELECT 1
FROM tableA a2
JOIN tableB b ON (<<join between a,b,and a2>>)
JOIN tableC c ON (<<join between b,and c>>)
WHERE c.SomeCol = <<value>>)