我有两张桌子。 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中有新条目。
答案 0 :(得分:6)
有很多方法可以做到这一点(left join
,not exists
,not 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。