我们有2张桌子。表"列表"有 1114 行。表" 公司"有1094行。这些表有1082条公共线。当我查找表格之间不常见的行时, LEFT JOIN 会返回正确的结果,但NOT IN则不会。
相关列中有绝对的 no nulls 。 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
)
答案 0 :(得分:1)
看起来你有重复。
如果列表如下:
A,B,C,A
公司
A,B,C,d,E,A
然后公司列表的左连接为您提供6个结果。
但是,不在,你会给你3或0,这取决于你正在做什么。