sql >> Databáze >  >> RDS >> Mysql

MySQL:Chyba SQL:1140, Stav SQL:42000

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

  1. Chyby MySQL můžete vyhledávat zde
  2. group-by-functions
  3. podobný příspěvek na stackoverflow.com
  4. další fórum, kde se diskutuje o podobném problému
  5. 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.  

Režimy SQL serveru

  • 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 nebo sql-mode="modes" v souboru voleb, jako je my.cnf (Unix operating systems) nebo my.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 nebo sql-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

  1. Režim SQL ONLY_FULL_GROUP_BY je příliš restriktivní
  2. režim SQL:nefunguje pouze celá skupina podle režimu
  3. MySQL 5.0 FAQ:Server SQL Mode


  1. Jak uložit Java Instant v databázi MySQL

  2. Jak číslovat řádky v SQL

  3. Skript pro vytvoření uživatele mysql

  4. mysql pro python 2. 7 říká, že Python v2.7 nebyl nalezen