mysql故障?not in和left join返回不同的结果

hivapdat  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(391)

我们有两张table。表“list”有1114行。表“companies”有1094行。这些表有1082条公共线。当我查找表之间不常见的行时,left join返回正确的结果,但not in不返回。
相关列中没有绝对空值。left join返回的值(如前所述不为null)只属于一个表,而不是预期的另一个表。
table是空的 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
)
c90pui9n

c90pui9n1#

看起来你有重复的。
如果列表类似于:

A,B,C,A

和公司:

A,B,C,D,E,A

然后一个左连接的公司名单给你6个结果。
然而,一个not-in会给你3或0,这取决于你用哪种方式来做。

相关问题