我正试图将表1中的行复制到(我创建的(新表3中,表2中不存在表1的ID(即使有些行相同(,并且表1中至少有一个键不是空
我使用"NOT IN">,但它仍然返回以下错误代码:
子查询返回了多个值。当子查询跟在=、!=、<lt;=,>,>=或者当子查询用作表达式时。
这是我的代码:
INSERT INTO table_3
SELECT ID, Key_1, Key_2, Key_3
FROM table_1
WHERE (SELECT ID FROM table_1) NOT IN (SELECT ID FROM table_2)
AND (Key_1 IS NOT NULL) OR (Key_2 IS NOT NULL) OR (Key_3 IS NOT NULL)
我建议您不要使用NOT IN
,而是使用NOT EXISTS
。如果子查询中的ANY值为NULL
,则NOT IN
将过滤掉所有行。
此外,您应该列出要插入的列。
因此:
INSERT INTO table_3 (ID, Key_1, Key_2, Key3)
SELECT t1.ID, t1.Key_1, t1.Key_2, t1.Key_3
FROM table_1 t1
WHERE NOT EXISTS (SELECT 1
FROM table_2 t2
WHERE t2.id = t1.id
) AND
(t1.Key_1 IS NOT NULL) OR
(t1.Key_2 IS NOT NULL) OR
(t1.Key_3 IS NOT NULL)
在NOT in条件下,您需要使用表_1中的ID进行比较。
我还建议您通过别名引用列,并将OR条件放在适当的括号中。
例如:
INSERT
INTO table_3
SELECT a.ID,a.Key_1,a.Key_2,a.Key_3
FROM table_1 a
WHERE a.ID NOT IN (SELECT ID FROM table_2)
AND( (a.Key_1 IS NOT NULL)
OR (a.Key_2 IS NOT NULL)
OR (a.Key_3 IS NOT NULL)
)