Dit is een veelvoorkomende fout voor MySQL-gebruikers. In MySQL 5.7 dwingt de database standaard de standaardsemantiek af die de meeste andere SQL-databases al jaren afdwingen.
De regel is dat elke kolom in uw selectielijst een van de volgende moet zijn:
- Genoemd in de GROUP BY-clausule; d.w.z. het is wat je groepeert.
- Binnen een aggregatiefunctie zoals MIN, MAX(), SUM(), GROUP_CONCAT(), etc.
- Functioneel afhankelijk van de kolom waarop u groepeert (dit is de uitbreiding van MySQL op standaard SQL-gedrag, en andere SQL-databases ondersteunen dit niet noodzakelijkerwijs).
In uw zoekopdracht (ik zal uw SELECT *
uitbreiden ):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
Je groepeert op feature_key, maar dit betekent dat de andere kolommen niet voldoen aan de regels die ik hierboven heb beschreven.
Hier is een manier om het op te lossen:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
Het lijkt misschien overbodig om MAX(user_id)
. te gebruiken omdat er slechts één waarde mogelijk is op basis van de voorwaarde van de WHERE-clausule. Maar het kan ook geen kwaad. MIN(user_id)
zou ook werken.
Zie ook mijn eerdere antwoorden over dezelfde fout: