Toto je běžná chyba pro uživatele MySQL. V MySQL 5.7 ve výchozím nastavení databáze vynucuje standardní sémantiku, kterou většina ostatních SQL databází prosazuje již léta.
Pravidlem je, že každý sloupec ve vašem výběrovém seznamu musí být jedním z:
- Pojmenováno v klauzuli GROUP BY; tj. je to to, co seskupujete.
- Uvnitř agregační funkce jako MIN, MAX(), SUM(), GROUP_CONCAT() atd.
- Funkčně závislé na sloupci, podle kterého seskupujete (toto je rozšíření MySQL ke standardnímu chování SQL a ostatní databáze SQL to nezbytně nepodporují).
Ve vašem dotazu (rozšířím váš SELECT *
):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
Seskupujete se podle feature_key, ale to znamená, že ostatní sloupce nesplňují pravidla, která jsem popsal výše.
Zde je způsob, jak to opravit:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
Může se zdát nadbytečné použít MAX(user_id)
protože existuje pouze jedna možná hodnota na základě podmínky klauzule WHERE. Ale ani to není na škodu. MIN(user_id)
by také fungovalo.
Viz také mé minulé odpovědi na stejnou chybu: