mysql - MySQL故障?NOT IN 和 LEFT JOIN 返回不同的结果
问题描述
我们有 2 张桌子。表“列表”有1114行。表“公司”有 1094 行。这些表有 1082 条公共线。当我查找表之间不常见的行时,LEFT JOIN返回正确的结果,但 NOT IN 没有。
相关列中绝对没有空值。LEFT JOIN返回的值(如前所述不为空)只属于一个表,但不属于另一个表,正如人们所期望的那样。
这些表是InnoDB
,相关列都是,varchar(255)
并且每个都有一个索引。
有人可以帮助解释这种奇怪的行为吗?
以下是查询及其结果:
正确结果:
SELECT COUNT(*)
FROM list l
LEFT JOIN companies c
ON l.Full_Company_Name = c.Full_Company_Name
WHERE c.Full_Company_Name IS NULL
Array
(
[COUNT(*)] => 32
)
SELECT COUNT(*)
FROM companies c
LEFT JOIN list l
ON l.Full_Company_Name = c.Full_Company_Name
WHERE l.Full_Company_Name IS NULL
Array
(
[COUNT(*)] => 12
)
意想不到的结果:
SELECT COUNT(*)
FROM companies c
WHERE c.Full_Company_Name NOT IN
(SELECT l.Full_Company_Name FROM list l)
Array
(
[COUNT(*)] => 11
)
SELECT COUNT(*)
FROM list l
WHERE l.Full_Company_Name NOT IN
(SELECT c.Full_Company_Name FROM companies c )
Array
(
[COUNT(*)] => 0
)
解决方案
看起来你有重复。
如果列表类似于:
A,B,C,A
和公司:
A,B,C,D,E,A
然后,公司列表的左连接会为您提供 6 个结果。
然而,一个 not in 会给你 3 或 0,这取决于你做的方式。
推荐阅读
- pandas - How to force a multiindex pandas dataframe to have the same number of index in a level?
- java - 向下滚动以查找文本在 android 模拟器中不起作用的元素
- sql - 为什么当我的子查询无效时,此 SQL 查询会起作用?- 甲骨文
- java - 试图弄清楚如何在 html 文件中显示 java 小程序
- ffmpeg - 有没有办法通过 RTSP 运行 MPEG-TS 流?
- javascript - 按住鼠标按钮时继续上下移动元素
- meson-build - 来自 include_directories 的介子绝对路径
- docker - docker-compose:客户端版本太新
- android - 使用 ProcessBuilder 运行 tor 二进制文件
- c# - 如何在项目文件夹中检索 Excel 文件?