MySQL故障? NOT IN和LEFT JOIN返回不同的结果

时间:2018-06-14 16:23:26

标签: mysql

我们有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
)

1 个答案:

答案 0 :(得分:1)

看起来你有重复。

如果列表如下:

A,B,C,A

公司

A,B,C,d,E,A

然后公司列表的左连接为您提供6个结果。

但是,不在,你会给你3或0,这取决于你正在做什么。