- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
SELECT media.*
FROM media
INNER JOIN (
SELECT hall_id, MIN(position) AS minpos
FROM media
GROUP BY zal_id
) AS b ON media.hall_id = b.hall_id AND
IFNULL(media.position, 0) = IFNULL(b.minpos, 0)
WHERE media.hall_id IN (...)
GROUP BY media.hall_id
В первом случае Вам надо читать ман, а во втором случае Вам надо завязывать с программированием, ибо человеку, работающему с MySQL нет места в профессии.
Эй-эй. Не обижай слоньку. Это ж лучшая опенсурсная база...
В опенсурсе каждый начинает свой проект, вместо того, чтобы объединиться и доделать. Ведь начинать, как правило, интересней, чем доводить до ума. Из-за этого там 100500 плееровЮ, десктопов и прочего говна, и все кривые.
что за zal_id?
Только, если можно, без политики.
SELECT media.* с GROUP BY , это..
ты на правильный сайт попал!
Чтобы ответ был детерминированным, все поля должны попасть либо в group by, либо в какую-нибудь агрегирующую функцию (avg, min и т.п.). И все вменяемые СУБД это проверяют.
Мускуль же позволяет оставить поле и без группировки и без агрегации. В итоге он выбирает какое-то значение из группы. Какое именно - а хуй знает. Всё зависит от фазы луны и настроения оптимизатора.
В общем очередная говнофича мускуля, включенная по умолчанию.
>В общем очередная говнофича мускуля, включенная по умолчанию.
Вроде в T-SQL так же. Хотя я точно не помню включено ли оно по дефолту.
Ну это ж РАСШИРЕНИЕ! В ANSI ж дураки сидят, запрещают всё.
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36272.1570/html/commands/X96182.htm
В мускуле выбирается неизвестно какая строка. В transact-sql - все, просто сгруппированные и заагрегированые поле в них дублируются - т.е. это всего лишь безобидный аналог over'а, а не недетерминированная питушня.
а как же
Column 'FOOO' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.?
Ну вообще-то они по своему обыкновению спёрли его, потом расширили/переделали. Как ту же жабу, например.
Может просто опцию по дефолту выключили, а она где-то там в недрах и сидит.
Но я думаю что от него уже ничего не осталось.
Собссно NT тоже сделали на основе кое-какой операционки)
> Но я думаю что от него уже ничего не осталось.
Но они во многом похожи. Синтаксис паскальный, опции и прочее.
Вот почему-то все пытаются навязать мне свои расширения... gcc, msvs, mysql... Все включают расширения по-умолчанию, и я почему-то должен их отключать, чтобы случайно не поюзать (или, в случае с мускулем, не залететь на что-нибудь ужасное). Ладно, блин, платные проги - можно списать на vendor lock. Но опенсурс то зачем этим страдает?
Имхо, по умолчанию, система должна работать максимально близко к стандарту. А если мне чего-то не хватит - так и быть, включу.
MS-SQL -- няша, и он бросает ошибку в таком слуае
Зачем Вам вообще реляционная база?
Если нету группировок да джойнов, а нужна только выборка документов по ключу - само то.
select hall_id, isnull(position,0) as min_position
from media
group by hall_id
having isnull(position,0) = min (isnull(position,0))