SQL - 将一个表中的列数据添加到另一个表中,同时保留原始数据

时间:2014-11-05 03:07:34

标签: sql database oracle

我需要将一个表(table1)中的数据添加到另一个表(table2)中,fullname列中的数据在两个表中都匹配。下面的代码几乎可以实现我想要的,除了它删除table1的标题列中的所有其他数据。

UPDATE table1
SET title = (SELECT title
               FROM table2
             WHERE table2.fullname = table1.fullname)

我的目标是更新table1的标题列,使其最初拥有的数据加上table2标题列中的数据,而不会在运行SQL查询之前删除table1标题列中的数据。

2 个答案:

答案 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匹配项的行。