2014-11-05 67 views
1

我需要从一个表(表1)数据添加到另一个表(表2)凡在全名称列中的数据在两个表中匹配。下面的代码几乎可以做我想做的事情,只不过它删除了table1标题列中的所有其他数据。SQL - 从一个表添加列数据到另一个,同时保留原有的数据

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

我的目标是更新表1的标题栏同时拥有它原本的数据以及从表2的标题栏,但不删除之前运行的SQL查询在表1的标题列中的数据的数据。

+0

如果有两个或多个记录在'table2'与同'fullname'? – ekad 2014-11-05 03:13:52

+0

您标记所有的数据库管理系统,其DBMSü使用R,Oracle或SQL Server – radar 2014-11-05 03:15:03

+0

你的意思是你想连接这两个领域? – 2014-11-05 03:16:34

回答

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) 

否则不匹配的冠军将获得归零了!这样做的原因是,子查询的结果将是NULL时全名不存在table2

如果级联是你要找的内容(如上@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) 

希望这有助于。

+0

谢谢。你的第一个建议正是我所需要的。 – point71echo 2014-11-05 04:25:22

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找到匹配的行。

相关问题