В: почему ошибка?
Рассмотрим две строки со значениями show_title 'True Detective' и 'True Lies'
Выражение в GROUP BY будет возвращать T
для обеих этих строк, поэтому эти строки будут объединены в одну строку в наборе результатов.
Запрос может возвращать только одно значение для столбца в свернутой строке, и оно не определено / неоднозначно, какое из двух значений вернуть. С ONLY_FULL_GROUP_BY в sql_mode MySQL более точно соответствует спецификации ANSI SQL; ошибка 1055 - это поведение, похожее на то, что мы наблюдаем в других реляционных СУБД, например Oracle, Microsoft SQL Server, Teradata, DB2 и др.
В: как решить ошибку с помощью запроса?
Нормативным шаблоном является использование агрегатной функции, чтобы указать, какое значение (из набора возможных значений) вернуть.
Например, MAX()
или MIN()
. Демонстрация:
SELECT SUBSTR(b.show_title,1,1) AS s1
, MAX(b.show_title) AS max_show_title
, MIN(b.show_title) AS min_show_title
FROM shows b
WHERE b.active = 1
GROUP BY SUBSTR(b.show_title,1,1)
позволит избежать ошибки 1055 и может вернуть, например,
s1 max_show_title min_show_title
-- --------------- ---------------
T True Lies True Detective