sql - 错误代码“子查询返回超过 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)
解决方案
我不鼓励您使用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)
推荐阅读
- apache-spark - 直线火花节俭服务器问题
- html - 一键提交多个表单
- python - python中的Face_recognition列表超出范围错误
- r - 投影偏移异常
- python - 忽略滚动平均计算熊猫中的 NaN 值
- python - 当我尝试访问上传到 aws s3 存储桶的图像时出现 signaturedoesntmatch 错误
- c# - 获取未处理的异常。System.NullReferenceException:对象引用未设置为对象的实例。在向类添加数据时
- python - 从 SPARK 中的 RDD 中找到具有最大长度的单词
- python - 解析 xhtml 时出错,因为要上传到网站的字符串中的“<”字符
- python - 如何检查数据帧的某些行是否在多个数据帧中匹配,按顺序在熊猫中