2013-09-27 144 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的地方。

相關問題