sql >> Database teknologi >  >> RDS >> Mysql

Sådan rettes forespørgselsgruppe med only_full_group_by

Dette er en almindelig fejl for MySQL-brugere. I MySQL 5.7 håndhæver databasen som standard den standardsemantik, som de fleste andre SQL-databaser har håndhævet i årevis.

Reglen er, at hver kolonne i din valgliste skal være en af:

  • Navnet i GROUP BY-sætningen; dvs. det er, hvad du grupperer.
  • Inde i en aggregeret funktion som MIN, MAX(), SUM(), GROUP_CONCAT() osv.
  • Funktionelt afhængig af den kolonne, du grupperer efter (dette er MySQL's udvidelse til standard SQL-adfærd, og andre SQL-databaser understøtter ikke nødvendigvis dette).

I din forespørgsel (jeg udvider din SELECT * ):

select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key

Du grupperer efter feature_key, men det betyder, at de andre kolonner ikke overholder reglerne, jeg beskrev ovenfor.

Her er en måde at løse det på:

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key

Det kan virke overflødigt at bruge MAX(user_id) da der kun er én mulig værdi baseret på WHERE-sætningsbetingelsen. Men der er heller ingen skade. MIN(user_id) ville også virke.

Se også mine tidligere svar på denne samme fejl:




  1. Indstilling af MySQL root-brugeradgangskoden på OS X

  2. Korrekt indsættelse af tabelnavn

  3. Spring Boot JPA MySQL :Kunne ikke bestemme en passende driverklasse

  4. WHERE-sætning ved hjælp af værdier, der kunne være NULL