【发布时间】:2018-11-27 15:33:45
【问题描述】:
我有 3 张桌子:
Table1
-------
ID
Field1
Field2
Table2
_______
ID
Name
Table2_OLD
____________
ID
Name
我需要将表 2 中的 ID 更新为 Table2 中的 ID,其中 Table2.Name = Table2_OLD.Name
Table2 和 Table2_OLD 中的 ID 不同,只能使用名称来获取正确的 ID:
SELECT Table2.ID
FROM Table2
INNER JOIN Table2_OLD ON Table2.Name=Table2_OLD.Name
我写了如下更新声明:
UPDATE Table1 SET Table1.ID=(SELECT DISTINCT t2.ID
FROM Table2 t2
INNER JOIN Table2_OLD t3
ON t2.Name=t3.Name
AND t2.ID=Table1.ID)
但它给了我一个错误
无法将 Table1.ID 更新为 null`
我尝试过使用
UPDATE Table1 SET Table1.ID = (SELECT DISTINCT t2.ID
FROM Table2 t2
INNER JOIN Table2_OLD t3
ON t2.Name=t3.Name
AND t2.ID=Table1.ID
AND NOT t2.ID is null)
但遇到了同样的错误。
谁能帮忙?
【问题讨论】:
-
我认为你想要一个带有更新语句的
WHERE子句,而不是子查询。 -
我无法从更新语句的子查询中访问任何值
-
update的语法中没有join关键字。 -
如果您需要限制要更新的行,则在
update中添加where子句。
标签: sql oracle join sql-update