ORDER BY не работает должным образом с GROUP BY - PullRequest
1 голос
/ 24 октября 2011

У меня есть две таблицы: учреждение и филиал.Учреждение является родительской таблицей.Когда я выбираю список филиалов, я хочу, чтобы он извлекал название заведения, если заголовок ветви пуст.Кроме того, я хочу показать ветку только один раз для каждого заведения.Вот что я придумал:

SELECT 
  branch.id
  , branch.establishment_ID
  , IFNULL(branch.branch_title, establishment.name) AS branch_title 
FROM branch 
LEFT JOIN establishment ON branch.establishment_ID = establishment.id 
WHERE cityID = 2 
GROUP BY establishment_ID 
ORDER BY branch_title

Однако результаты, похоже, не в каком-то конкретном порядке.Я хочу, чтобы они были в алфавитном порядке.Я читал, что в MySQL 5.0.5 были проблемы с GROUP BY и ORDER BY в одном запросе, но я работаю с 5.5.9.Что я могу сделать, чтобы исправить этот запрос?

1 Ответ

1 голос
/ 24 октября 2011

Я бы предположил (зная другие системы SQL), что ваш ORDER BY применяется к branch.branch_title, а не к вашему новому псевдониму. Вы можете скопировать выражение IFNULL() в ORDER BY?

SELECT 
  branch.id
  , branch.establishment_ID
  , IFNULL(branch.branch_title, establishment.name) AS branch_title 
FROM branch 
LEFT JOIN establishment ON branch.establishment_ID = establishment.id 
WHERE cityID = 2 
GROUP BY establishment_ID 
ORDER BY IFNULL(branch.branch_title, establishment.name)

В противном случае строки NULL branch_title всегда будут отображаться (до / после) не NULL и не будут сортироваться каким-либо образом.

...