powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Корректен ли запрос?
8 сообщений из 8, страница 1 из 1
Корректен ли запрос?
    #38511952
d3us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CODE - тип изделия, COLOUR - цвет изделия
SELECT CODE, COLOUR
FROM ITEMS
GROUP BY CODE
HAVING COUNT (*) > 10
...
Рейтинг: 0 / 0
Корректен ли запрос?
    #38511956
d3us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, насколько корректен данный запрос? Заранее спасибо!
...
Рейтинг: 0 / 0
Корректен ли запрос?
    #38511957
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3us, нет, хотя мускль по умолчанию подобное допускает.
...
Рейтинг: 0 / 0
Корректен ли запрос?
    #38511962
d3us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, ничего не понял :) Нет, но sql допускает, это как? :) Так HAVING будет фильтровать CODE со значением больше 10 или запрос написан некорректно?
...
Рейтинг: 0 / 0
Корректен ли запрос?
    #38511969
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3usНет, но sql допускает, это как?А вот так :) Синтаксически он некорректен. Но my sql такие запросы выполнять не отказывается, в отличие от большинства других скл-СУБД. Касательно вопроса "почему" - 13173672
...
Рейтинг: 0 / 0
Корректен ли запрос?
    #38511971
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3usHAVING будет фильтровать CODE со значением больше 10Будет, только не "со значением", а "с количеством записей", и не code, а результат группировки.
...
Рейтинг: 0 / 0
Корректен ли запрос?
    #38512030
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglird3usНет, но sql допускает, это как?А вот так :) Синтаксически он некорректен. Но my sql такие запросы выполнять не отказывается, в отличие от большинства других скл-СУБД. Касательно вопроса "почему" - 13173672

Запрос синтаксически корректен, он некорректен семантически.

Поле COLOUR не входит в GROUP BY и не агрегируется. Откуда его брать -- неизвестно.

Обычно в SQL такое недопускается (не знаю, как по стандарту, но многие СУБД просто выдают однозначно ошибку).
Но MySQL такие запросы пропускает, как он себя при этом ведёт -- не знаю, потому как никогда такой хренью не интересовался, да и тебе не советую. А советую все неагрегаты помещать в GROUP BY.
...
Рейтинг: 0 / 0
Корректен ли запрос?
    #38512109
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле в MySQL реализовано расширение группировки, позволяющее не включать в GROUP BY повторяющиеся поля итоговой выборки.

При правильном использовании это весьма удобно, но беда в том, что допускается и неправильное использование этой фичи.

Пример: id1val11100id2id2_Tab1val2111021203130Тогда для
Код: sql
1.
2.
3.
SELECT *
FROM Tab1
join Tab2 on Tab2.id2_Tab1=Tab1.id1

Получим итогid1val1id2id2_Tab1val2110011101100212011003130
В MySQL можно написать запрос
Код: sql
1.
2.
3.
4.
SELECT Tab1.id1, Tab1.val1, COUNT(*) qty
FROM Tab1
join Tab2 on Tab2.id2_Tab1=Tab1.id1
group by Tab1.id1


В этом случае MySQL берет данные для Tab1.val1 из произвольной (первой попавшейся) строки внутри группы по Tab1.id1, и абсолютно прав так как все остальные поля из Tab1 в этой группе одинаковые.
Стандарт же SQL требует явного перечисления всех полей tab1 в списке группировки, что утяжеляет понимание запроса

Беда в том, что внутри этой группы по Tab1.id1 строки из Tab2 разные, но MySQL не обращает на это никакого внимания, и по-прежнему берет из группы произвольную строку, что приводит к неоднозначности запроса
Код: sql
1.
2.
3.
4.
SELECT Tab1.id1, Tab1.val1, COUNT(*) qty, Tab2.val2
FROM Tab1
join Tab2 on Tab2.id2_Tab1=Tab1.id1
group by Tab1.id1

id1val1qtyval21100310? 20? 30? непредсказуемо
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Корректен ли запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]