sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Välja en kolumn som inte finns i Gruppera efter

Det är sant att den här funktionen tillåter en del tvetydiga frågor, och returnerar tyst en resultatuppsättning med ett godtyckligt värde plockat från den kolumnen. I praktiken tenderar det att vara värdet från raden inom gruppen som fysiskt lagras först.

Dessa frågor är inte tvetydiga om du bara väljer kolumner som är funktionellt beroende av kolumnen/kolumnerna i GROUP BY-kriterierna. Med andra ord, om det bara kan finnas ett distinkt värde av den "tvetydiga" kolumnen per värde som definierar gruppen, är det inga problem. Den här frågan skulle vara olaglig i Microsoft SQL Server (och ANSI SQL), även om den logiskt inte kan leda till oklarhet:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;

MySQL har också ett SQL-läge för att få det att fungera enligt standarden:ONLY_FULL_GROUP_BY

FWIW, SQLite tillåter också dessa tvetydiga GROUP BY-satser, men den väljer värdet från den senaste rad i gruppen.

Åtminstone i den version jag testade. Vad det innebär att vara godtycklig är att antingen MySQL eller SQLite skulle kunna ändra sin implementering i framtiden och ha något annorlunda beteende. Du bör därför inte lita på att beteendet förblir som det är för närvarande i tvetydiga fall som detta. Det är bättre att skriva om dina frågor så att de är deterministiska och inte tvetydiga. Det är därför MySQL 5.7 nu aktiverar ONLY_FULL_GROUP_BY som standard.



  1. Återställning av Oracle-databas

  2. Allvarligt fel:Anrop till en medlem funktion query() på null

  3. Hur undkommer jag % från python mysql-frågan

  4. Autentiseringsplugin 'caching_sha2_password' kan inte laddas