MySQL: упорядочение столбцов при использовании группового символа с группой по имеет странное поведение - PullRequest
0 голосов
/ 06 января 2019

В чем разница между этими двумя операторами MySQL?

Работает:

select *, count(mycol) c from mytable group by mycol;

Не работает:

select count(mycol) c, * from mytable group by mycol;

Первое утверждение работает так, как я ожидал, а второе дает синтаксическую ошибку. Почему заказ имеет значение?

У меня проблемы с поиском ответа от Google, потому что я не совсем уверен, правильно ли я задаю вопрос.

Изменить:

Вот очищенное сообщение об ошибке. Я использую MySQL Workbench, если это актуально.

Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '* из mytable group by id' в строке 1

1 Ответ

0 голосов
/ 06 января 2019

Просто назовите таблицу и синтаксическая ошибка исчезнет.

select count(t.id) c, t.* from mytable t group by id;

См. это дд скрипка .

Похоже, что MySQL допускает использование только (неквалифицированного) * только сразу после SELECT. Следующий запрос также вызывает синтаксическую ошибку:

select 1, * from mytable t;

Документация не позволяет использовать голые * в сочетании с другими элементами в списке SELECT:

Список выбора, состоящий только из одного неквалифицированного *, может использоваться в качестве сокращения для выбора всех столбцов из всех таблиц.

Использование неквалифицированного * с другими элементами в списке выбора может привести к ошибке разбора. Чтобы избежать этой проблемы, используйте квалифицированную ссылку tbl_name.*.

...