Sql 将唯一数据从一个表复制到另一个表
我有两张桌子<代码>表A是主表,Sql 将唯一数据从一个表复制到另一个表,sql,postgresql,insert,Sql,Postgresql,Insert,我有两张桌子表A是主表,表B是辅助表。现在,我需要从表B复制到表A中,仅复制表A中不存在的带有辅助id的行 表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 !=
表B
是辅助表。现在,我需要从表B
复制到表A
中,仅复制表A中不存在的带有辅助id的行
表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中有新的条目。有很多方法可以做到这一点(左连接
,不存在
,不在
中)。如果您正在学习SQL,不在
中,可能是第一次接触时最容易的方法:
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);
我应该说我更喜欢不存在:
WHERE NOT EXISTS (SELECT 1 FROM table_A a WHERE a.aux_id = b.aux_id);
原因与NULL
值的处理有关。不存在
符合您的期望<如果子查询返回一个NULL
值,则code>NOT IN
永远不会返回true。有很多方法可以做到这一点(左连接
,不存在
,不在
)。如果您正在学习SQL,不在
中,可能是第一次接触时最容易的方法:
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);
我应该说我更喜欢不存在:
WHERE NOT EXISTS (SELECT 1 FROM table_A a WHERE a.aux_id = b.aux_id);
原因与NULL
值的处理有关。不存在
符合您的期望<如果子查询返回一个NULL
值,则code>NOT IN
永远不会返回true。效率更高一些。SELECT 1不要求postgresql分配结果集,SELECT*就是这样做的。由于我们只测试是否有任何结果,分配的努力是毫无价值的,它更有效一些。SELECT 1不要求postgresql分配结果集,SELECT*就是这样做的。由于我们只测试是否有任何结果,分配的努力是毫无价值的。