首页 > 解决方案 > 错误代码“子查询返回超过 1 个值 [...]”

问题描述

我正在尝试将表 1 中的行复制到新表 3(我创建)中,其中表 1 中的 ID 在表 2 中不存在(即使某些行相同),并且我的 3 个键中的至少一个在表中1 不为空

我正在使用“NOT IN”,但它仍然返回以下错误代码:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

这是我的代码:

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)

标签: sqlsql-serversql-insert

解决方案


我不鼓励您使用NOT IN,NOT EXISTS代替使用。 NOT IN如果子查询中的 ANY 值是 ,将过滤掉所有行NULL

此外,您应该列出要插入的列。

所以:

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)

推荐阅读