SQL запрос, в чем разница?

12
D
На сайте с 28.06.2008
Offline
1104
513

Почему выборка дает разный результат при

WHERE t1.category_id = 116 or t1.category_id = 117

и

WHERE (t1.category_id = 116 or t1.category_id = 117)

второй вариант выдает меньше значений

?

IL
На сайте с 20.04.2007
Offline
435
#1
Dram:
второй вариант выдает меньше значений

А база точно одна и та же? =)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S
На сайте с 30.09.2016
Offline
469
#2

Заодно интересно было бы проверить запросы

WHERE t1.category_id>115 AND t1.category_id<118

и

WHERE (t1.category_id>115 AND t1.category_id<118)

Вдруг ещё 2 разных результата получатся?

PS: у меня получились 4 одинаковых результата, как ни странно... :(

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
DV
На сайте с 01.05.2010
Offline
644
#3

Интересен весь запрос, то, что до WHERE и после 117

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
IL
На сайте с 20.04.2007
Offline
435
#4
Sitealert:
PS: у меня получились 4 одинаковых результата, как ни странно...

У Вас данные другие.. 😂

На http://sql-ex.ru, к примеру, есть задачи, в которых данные подобраны так, что некоторые "неправильные" запросы выдают правильные ответы на тестовой базе, но ошибочные на основной..

danforth
На сайте с 18.12.2015
Offline
153
#5

Количество строк должно быть одинаково, а вот порядок не детерминирован, если вы не указали ORDER BY (хотя и в этом случае он должен быть одинаков между двумя запросами). В запросе нет группировок?

Junior Web Developer
Mik Foxi
На сайте с 02.03.2011
Offline
1126
#6

Вопрос вообще про MySQL ?

Универсальный антибот, антиспам, веб файрвол, защита от накрутки поведенческих № 1 в рунете: https://antibot.cloud/
IL
На сайте с 20.04.2007
Offline
435
#7
foxi:
Вопрос вообще про MySQL ?

Думаю, по большому счёту, не так уж важно. Со времён SQL-92 логика работы и приоритет операторов, используемых в этой части запроса не изменялась.

---------- Добавлено 26.02.2020 в 11:11 ----------

Dram:
Почему выборка дает разный результат при

А можно контрольный пример в студию?.. ))) Хотя бы скрины результата, где разница видна (можно с затёртыми "важными" данными).. а лучше - запрос целиком и дамп таблиц (опять же, с затёртыми данными), для воспроизведения "разности результата"..

D
На сайте с 28.06.2008
Offline
1104
#8

Запрос такой, база одна

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
На сайте с 18.12.2015
Offline
153
#9

Версия < 5.7? Покажите


SELECT @@GLOBAL.sql_mode;

Нужно добавить ONLY_FULL_GROUP_BY, чтобы ваш запрос не работал, после чего переписать его по человечески.

Ну и как обычно, сам WHERE скинули не полный, хорошо хоть база одна и та же.

W
На сайте с 08.02.2017
Offline
169
#10

так естественно разный результат. AND приоритетнее, чем OR. и в зависимости от скобок выходят разные условия. без скобок выходит t1.category_id = 116 без остальных условий ИЛИ t1.category_id = 117 со всеми следующими AND. А в случае со скобками выбираем записи обеих категорий, и на обе распространяются условия после AND

Комплексный аудит ИМ. Формирование УТП, анализ юзабилити, каналов продвижения. Контекстная реклама, настройка систем аналитики. Консультация - бесплатно, в ЛС
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий