错误代码"Subquery returned more than 1 value [...]"



我正试图将表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)
)

相关内容

最新更新