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

时间:2013-09-27 07:39:55

标签: 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.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。

1 个答案:

答案 0 :(得分:1)

第一个查询具有“where p1.partner_id = 180”附加where子句。所以第二个检查每个记录,但第一个记录只有partner_id等于180。