2016-05-18 8 views
2

Ich habe diese Anfrage:ORDER BY trim (Feld) arbeitet auf einem Server und nicht auf anderen

SELECT count(DISTINCT trim(level1)) cnn 
FROM table1 
WHERE f1 != -1 
ORDER BY trim(level1);` 

Es auf einer Datenbank läuft perfekt und auf einem anderen typisch man gibt es:

ORDER BY trim Mischen von GROUP Säulen (MIN(), MAX(), COUNT(), ...) mit ohne GROUP Spalten ist illegal, wenn es keine GROUP BY-Klausel ist

wenn ichentfernenes funktioniert gut.

Kann jemand erklären warum? Ich benutze MySQL.

Antwort

1

Mit MySQL können Sie nicht standardmäßige SQL-Abfragen ausführen, für die die SELECT-Liste, die HAVING-Bedingung oder die ORDER BY-Liste nicht aggregierte Spalten betreffen.

In Ihrer Anfrage Sie von einer nicht aggregierten Spalte bestellen:

SELECT count(DISTINCT trim(level1)) cnn 
FROM table1 
WHERE f1 != -1 
ORDER BY trim(level1) 

da Sie haben keine Gruppe, in Standard-SQL können Sie nur ORDER BY count(DISTINCT trim(level1)), aber Sie bestellen von trim(level1), die nicht aggregiert (was ist der Zweck davon überhaupt?).

Der Grund, warum auf einem Server funktioniert und einer anderen nicht funktioniert, ist, dass auf dem einen Server ONLY_FULL_GROUP_BY deaktiviert ist (also die Abfrage ausgeführt wird), und der andere hat es aktiviert.

Für eine vollständige Erklärung über Standard-SQL-92-Standard SQL99 und wie MySql behandelt sie bitte diese Anleitung Seite: MySQL Handling of GROUP BY