Detta är ett vanligt fel för MySQL-användare. I MySQL 5.7 tillämpar databasen som standard standardsemantiken som de flesta andra SQL-databaser har tillämpat i flera år.
Regeln är att varje kolumn i din vallista måste vara en av:
- Benämns i GROUP BY-satsen; dvs det är vad du grupperar vara.
- Inuti en aggregerad funktion som MIN, MAX(), SUM(), GROUP_CONCAT() osv.
- Funktionellt beroende av kolumnen du grupperar efter (detta är MySQL:s tillägg till standard SQL-beteende, och andra SQL-databaser stöder inte nödvändigtvis detta).
I din fråga (jag utökar din SELECT *
):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
Du grupperar efter feature_key, men det betyder att de andra kolumnerna inte följer reglerna jag beskrev ovan.
Här är ett sätt att fixa det:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
Det kan tyckas överflödigt att använda MAX(user_id)
eftersom det bara finns ett värde möjligt baserat på WHERE-satsvillkoret. Men det är ingen skada heller. MIN(user_id)
skulle också fungera.
Se även mina tidigare svar på samma fel: