2013-09-27 106 views
0

首先查询:为什么这两个查询有不同的结果?

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。

+2

你能提供一些数据吗? (小提琴会很棒) –

+0

我真的不知道'mysql'的具体情况,但是在第一个引用'p1.partner_id = 180',而在第二个中有一个额外的散列'#',即'#p1.partner_id = 180' – whytheq

回答

1

第一个查询具有“where p1.partner_id = 180”additional where子句。所以第二个检查每一条记录,但第一个只在partner_id等于180的地方。

相关问题