WHERE t1.category_id = 116 or t1.category_id = 117
и
WHERE (t1.category_id = 116 or t1.category_id = 117)
второй вариант выдает меньше значений
?
ivan-lev
Dram: второй вариант выдает меньше значений
А база точно одна и та же? =)
Sitealert
Заодно интересно было бы проверить запросы
WHERE t1.category_id>115 AND t1.category_id<118
и
WHERE (t1.category_id>115 AND t1.category_id<118)
Вдруг ещё 2 разных результата получатся?
PS: у меня получились 4 одинаковых результата, как ни странно… 🙁
DenisVS
Интересен весь запрос, то, что до WHERE и после 117
ivan-lev
Sitealert: PS: у меня получились 4 одинаковых результата, как ни странно…
У Вас данные другие.. 😂
На http://sql-ex.ru, к примеру, есть задачи, в которых данные подобраны так, что некоторые «неправильные» запросы выдают правильные ответы на тестовой базе, но ошибочные на основной..
danforth
Количество строк должно быть одинаково, а вот порядок не детерминирован, если вы не указали ORDER BY (хотя и в этом случае он должен быть одинаков между двумя запросами). В запросе нет группировок?
Mik Foxi
Вопрос вообще про MySQL ?
ivan-lev
foxi: Вопрос вообще про MySQL ?
Думаю, по большому счёту, не так уж важно. Со времён SQL-92 логика работы и приоритет операторов, используемых в этой части запроса не изменялась.
———- Добавлено 26.02.2020 в 11:11 ———-
Dram: Почему выборка дает разный результат при
А можно контрольный пример в студию?.. ))) Хотя бы скрины результата, где разница видна (можно с затёртыми «важными» данными).. а лучше — запрос целиком и дамп таблиц (опять же, с затёртыми данными), для воспроизведения «разности результата»..
t2.name as city,t2.morpher,t2.morpher2,t4.name,t1.average,t1.comments,t1.vote,t1.rate,t5.created,t6.name as spec
FROM spec_items as t1
INNER JOIN spec_sections as t2 on t2.id = t1.section_id
LEFT JOIN spec_working as t3 on t3.item_id = t1.id
LEFT JOIN spec_items as t4 on t3.firm_id = t4.id
LEFT JOIN spec_categories as t6 on t6.id = t1.category_id
LEFT JOIN comments_items as t5 on (t5.object_id = t1.id and t5.id = (SELECT max(id) FROM comments_items WHERE `object_id` = t1.id and object_group = ‘com_spec’))
WHERE t1.category_id = 116 or t1.category_id = 117
AND t1.fullname not LIKE ‘%.%’
AND t1.comments <=2
AND t5.ip != ‘13.13.13.14’
GROUP BY t1.id
limit 10
danforth
Версия < 5.7? Покажите
SELECT @@GLOBAL.sql_mode;
Нужно добавить ONLY_FULL_GROUP_BY, чтобы ваш запрос не работал, после чего переписать его по человечески.
Ну и как обычно, сам WHERE скинули не полный, хорошо хоть база одна и та же.
wicker
так естественно разный результат. AND приоритетнее, чем OR. и в зависимости от скобок выходят разные условия. без скобок выходит t1.category_id = 116 без остальных условий ИЛИ t1.category_id = 117 со всеми следующими AND. А в случае со скобками выбираем записи обеих категорий, и на обе распространяются условия после AND
Dram
Почему выборка дает разный результат при
и
второй вариант выдает меньше значений
?
ivan-lev
второй вариант выдает меньше значений
А база точно одна и та же? =)
Sitealert
Заодно интересно было бы проверить запросы
и
Вдруг ещё 2 разных результата получатся?
PS: у меня получились 4 одинаковых результата, как ни странно… 🙁
DenisVS
Интересен весь запрос, то, что до WHERE и после 117
ivan-lev
PS: у меня получились 4 одинаковых результата, как ни странно…
У Вас данные другие.. 😂
На http://sql-ex.ru, к примеру, есть задачи, в которых данные подобраны так, что некоторые «неправильные» запросы выдают правильные ответы на тестовой базе, но ошибочные на основной..
danforth
Количество строк должно быть одинаково, а вот порядок не детерминирован, если вы не указали ORDER BY (хотя и в этом случае он должен быть одинаков между двумя запросами). В запросе нет группировок?
Mik Foxi
Вопрос вообще про MySQL ?
ivan-lev
Вопрос вообще про MySQL ?
Думаю, по большому счёту, не так уж важно. Со времён SQL-92 логика работы и приоритет операторов, используемых в этой части запроса не изменялась.
———- Добавлено 26.02.2020 в 11:11 ———-
Почему выборка дает разный результат при
А можно контрольный пример в студию?.. ))) Хотя бы скрины результата, где разница видна (можно с затёртыми «важными» данными).. а лучше — запрос целиком и дамп таблиц (опять же, с затёртыми данными), для воспроизведения «разности результата»..
Dram
Запрос такой, база одна
SELECT t1.id,t1.fullname,t1.shortname,t1.lastname,t1.firstname,t1.middlename,
t2.name as city,t2.morpher,t2.morpher2,t4.name,t1.average,t1.comments,t1.vote,t1.rate,t5.created,t6.name as spec
FROM spec_items as t1
INNER JOIN spec_sections as t2 on t2.id = t1.section_id
LEFT JOIN spec_working as t3 on t3.item_id = t1.id
LEFT JOIN spec_items as t4 on t3.firm_id = t4.id
LEFT JOIN spec_categories as t6 on t6.id = t1.category_id
LEFT JOIN comments_items as t5 on (t5.object_id = t1.id and t5.id = (SELECT max(id) FROM comments_items WHERE `object_id` = t1.id and object_group = ‘com_spec’))
WHERE t1.category_id = 116 or t1.category_id = 117
AND t1.fullname not LIKE ‘%.%’
AND t1.comments <=2
AND t5.ip != ‘13.13.13.14’
GROUP BY t1.id
limit 10
danforth
Версия < 5.7? Покажите
Нужно добавить ONLY_FULL_GROUP_BY, чтобы ваш запрос не работал, после чего переписать его по человечески.
Ну и как обычно, сам WHERE скинули не полный, хорошо хоть база одна и та же.
wicker
так естественно разный результат. AND приоритетнее, чем OR. и в зависимости от скобок выходят разные условия. без скобок выходит t1.category_id = 116 без остальных условий ИЛИ t1.category_id = 117 со всеми следующими AND. А в случае со скобками выбираем записи обеих категорий, и на обе распространяются условия после AND