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

Syntaksfejl eller adgangsovertrædelse:1055 Udtryk #8 af SELECT-listen er ikke i GROUP BY-sætning og indeholder ikke-aggregeret kolonne

Dette er en ny ting i MySQL 5.7 og er en advarsel om, at din forespørgsel er tvetydig.

Overvej følgende tabel:

id | name | age | points -------------------------------------------- 1 Bob 21 1 2 James 14 1 3 Bob 21 3 4 James 14 2 5 Casey 17 3

Hvis du lavede følgende forespørgsel:

SELECT name, age, SUM(points) FROM scores GROUP BY name
 

Derefter name kolonne bruges til gruppering. Bemærk, at age kan have flere værdier, så det er "ikke-aggregeret". Du er nødt til at gøre noget for at kollapse disse værdier.

Adfærden i 5.6 og tidligere var bare at vælge den første afhængigt af sorteringsrækkefølgen, selvom dette nogle gange var uforudsigeligt og ville mislykkes. I 5.7 forhindrer de dig i at gøre det i første omgang.

Løsningen her er også at gruppere på det, eller at anvende en aggregeret operator som MIN() til det.



  1. mySQL UPDATE tabel baseret på SELECT (antal) af en anden tabel

  2. Oracle10 og JDBC:hvordan får man CHAR til at ignorere efterfølgende mellemrum ved sammenligning?

  3. MYSQL - Hvordan forbinder man to forespørgsler for at udelade elementer fundet i den anden forespørgsel (eller måske en bedre løsning?)

  4. SQL Server-fejl Implicit konvertering af fordi sammenstillingen af ​​værdien er uløst på grund af en kollationskonflikt.