Mysql 为什么这两个查询给出不同的结果?

Mysql 为什么这两个查询给出不同的结果?,mysql,sql,Mysql,Sql,第一个问题: select count(*) from partner_goods_category p1 where p1.partner_id = 180 and not exists (select 1 from partner_goods_category p2 where #p1.partner_id = 180 and #p2.partner_id = 180 and p1.partner_id = p2.partner_id and p2.p

第一个问题:

select count(*) from partner_goods_category p1 where p1.partner_id = 180 and not exists 
(select 1 from partner_goods_category p2 where 
    #p1.partner_id = 180 and 
    #p2.partner_id = 180 and 
    p1.partner_id = p2.partner_id and
    p2.parent_category_id = p1.category_id);

#1067
第二个问题:

select count(*) from partner_goods_category p1 where not exists 
(select 1 from partner_goods_category p2 where 
    #p1.partner_id = 180 and 
    p2.partner_id = 180 and 
    p1.partner_id = p2.partner_id and
    p2.parent_category_id = p1.category_id);


#1956

第二个似乎给出了错误的结果。这是为什么?这两个查询之间的区别是什么?因为在我看来,它们在逻辑上是相同的(可能它们的工作方式有点不同,但它们应该产生相同的结果)。数据库是MySQL 5.5。

第一个查询有“where p1.partner\u id=180”附加where子句。因此,第二个检查每个记录,但第一个检查仅在partner_id等于180的情况下进行。

您能提供一些数据吗?(Fiddle会很好)我真的不知道mysql的具体细节,但在第一个例子中它引用了
p1.partner\u id=180
,而在第二个例子中有一个额外的hash
,即
\p1.partner\u id=180