我们有两张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
)
1条答案
按热度按时间c90pui9n1#
看起来你有重复的。
如果列表类似于:
和公司:
然后一个左连接的公司名单给你6个结果。
然而,一个not-in会给你3或0,这取决于你用哪种方式来做。