将唯一数据从一个表复制到另一个表

时间:2015-11-10 12:51:42

标签: sql postgresql insert

我有两张桌子。 Table A是主表,table B是辅助表。现在我需要从table B复制到table A只有aux_id

中不存在table A的行

TABLE_A

id |aux_id | firstname | lastname

表-B

 aux_id | firstname | lastname

我在尝试什么,但显然没有成功。

INSERT INTO table_A(aux_id,firstname,lastname)(SELECT aux_id,firstname,lastname FROM table_B WHERE aux_id != aux_id);

我得到:INSERT 0 0

这是错误的,因为我确信我在表B中有新条目。

1 个答案:

答案 0 :(得分:6)

有很多方法可以做到这一点(left joinnot existsnot in)。如果您正在学习SQL NOT IN,可能是第一次遇到的最简单的事情:

INSERT INTO table_A(aux_id, firstname, lastname)
    SELECT aux_id, firstname, lastname
    FROM table_B
    WHERE b.aux_id NOT IN (SELECT a.aux_id FROM table_A a);

我应该说我更喜欢NOT EXISTS

    WHERE NOT EXISTS (SELECT 1 FROM table_A a WHERE a.aux_id = b.aux_id);

原因与处理NULL值有关。 NOT EXISTS符合您的期望。如果子查询返回NOT IN值,则NULL永远不会返回true。