Následující dotaz je neplatný s ONLY_FULL_GROUP_BY
povoleno. První je neplatný, protože jméno ve výběrovém seznamu není pojmenováno v GROUP BY
doložka
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
bez sloupců GROUP je nezákonné, pokud neexistuje klauzule GROUP BY
Dotaz můžete přepsat, aby fungoval správně jako
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
nebo
Vypněte ONLY_FULL_GROUP_BY a chyba by měla zmizet.
Odkazy vám mohou pomoci
- Chyby MySQL můžete vyhledávat zde
- group-by-functions
- podobný příspěvek na stackoverflow.com
- další fórum, kde se diskutuje o podobném problému
- režim-server-sql
AKTUALIZACE
Toto je odpověď na váš komentář.
But i would like to know more about disabling the Group BY mode in mysql db.
-
Server MySQL může pracovat v různých režimech SQL a může tyto režimy používat různě pro různé klienty v závislosti na hodnotě
sql_mode
systémová proměnná. Tato schopnost umožňuje každé aplikaci přizpůsobit provozní režim serveru svým vlastním požadavkům. -
Chcete-li nastavit režim SQL při spuštění serveru, použijte
--sql-mode="modes"
možnost na příkazovém řádku nebosql-mode="modes"
v souboru voleb, jako jemy.cnf (Unix operating systems)
nebomy.ini (Windows)
. režimy je seznam různých režimů oddělených čárkami. Chcete-li režim SQL explicitně vymazat, nastavte jej na prázdný řetězec pomocí--sql-mode=""
na příkazovém řádku nebosql-mode=""
v souboru možností. -
Chcete-li změnit režim SQL za běhu, použijte
SET [GLOBAL|SESSION] sql_mode='modes'
příkaz pro nastavení systémové proměnné sql_mode. Nastavení GLOBAL proměnné vyžaduje oprávnění SUPER a ovlivňuje provoz všech klientů, kteří se od té doby připojují. Nastavení proměnné SESSION ovlivní pouze aktuálního klienta. Každý klient může kdykoli změnit svou vlastní hodnotu relace sql_mode. -
Chcete-li určit aktuální globální hodnotu nebo hodnotu sql_mode relace, použijte následující příkazy:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Můžete se podívat na tabulku sql_mode
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
To se děje kvůli verzi MySQL. Jaká je verze MySQL vašeho místního počítače?
Jak zkontrolovat verzi MySQL?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Pro testování sql_mode ONLY_FULL_GROUP_BY
, vytvořil jsem tabulku patient
se dvěma sloupci id, name
a vložené záznamy. Pamatujte si sql_mode ONLY_FULL_GROUP_BY
není výchozí nastavení, musíte jej nastavit, pokud chcete.
1) Verze MySQL 5.0.45-community-nt
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Selhalo, nemělo smysl nastavovat sql_mode na ONLY_FULL_GROUP_BY
protože neumožňuje neagregované sloupce, které nejsou pojmenovány v klauzuli GROUP BY.
2) Verze MySQL 5.1.40-community
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Poté po nastavení sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
3) Verze MySQL 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Poté po nastavení sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Závěr
Jak můžete vidět, dotaz selhal ve verzi 5.0.45 a byl úspěšný po 5.1.40 a 5.5.28Před verzí MySQL 5.1.10 (nejsem si jistý)
dotaz bez GROUP BY
selže bez ohledu na sql_mode ONLY_FULL_GROUP_BY
nastavit nebo ne.
Některé zajímavé chyby a sql_mode faq odkaz
- Režim SQL ONLY_FULL_GROUP_BY je příliš restriktivní
- režim SQL:nefunguje pouze celá skupina podle režimu
- MySQL 5.0 FAQ:Server SQL Mode