2013-09-27 3 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

Можете ли вы предоставить некоторые данные? (Fiddle будет замечательным) –

+0

Я действительно не знаю специфики 'mysql', но в первом он ссылается на' p1.partner_id = 180', тогда как во втором есть дополнительный хэш '#' ie '# p1.partner_id = 180' – whytheq

ответ

1

Первый запрос имеет «где p1.partner_id = 180» дополнительно где предложение. Таким образом, вторая проверяется в каждой отдельной записи, но первая только там, где partner_id равна 180.

Смежные вопросы