我需要将一个表(table1)中的数据添加到另一个表(table2)中,fullname列中的数据在两个表中都匹配。下面的代码几乎可以实现我想要的,除了它删除table1的标题列中的所有其他数据。
UPDATE table1
SET title = (SELECT title
FROM table2
WHERE table2.fullname = table1.fullname)
我的目标是更新table1的标题列,使其最初拥有的数据加上table2标题列中的数据,而不会在运行SQL查询之前删除table1标题列中的数据。
答案 0 :(得分:2)
我假设你使用的是Oracle给出的语法。问题是,当您使用UPDATE
语句的这种形式时,您还需要一个WHERE EXISTS
子句或类似的东西:
UPDATE table1
SET title = ( SELECT title
FROM table2
WHERE table2.fullname = table1.fullname )
WHERE EXISTS ( SELECT 1 FROM table2
WHERE table2.fullname = table1.fullname )
否则,不匹配的标题将被清空!原因是当table2
中不存在fullname时,子查询的结果将为NULL。
如果您正在寻找连接(如上面的@PM 77-1评论),那么您将需要执行以下操作:
UPDATE table1
SET title = title || ',' || ( SELECT title
FROM table2
WHERE table2.fullname = table1.fullname )
WHERE EXISTS ( SELECT 1 FROM table2
WHERE table2.fullname = table1.fullname )
希望这有帮助。
答案 1 :(得分:2)
在Oracle中,您可以使用合并:
MERGE INTO table1 t1
USING (SELECT fullname, title
FROM table2) t2
ON t1.fullname = t2.fullname
WHEN MATCHED THEN
UPDATE SET t1.title = t2.title;
这只会更新找到fullname
匹配项的行。