Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:błąd SQL:1140, stan SQL:42000

Następujące zapytanie jest nieprawidłowe z ONLY_FULL_GROUP_BY włączony. Pierwszy jest nieprawidłowy, ponieważ nazwa na liście wyboru nie jest nazwana w GROUP BY klauzula

mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)

bez kolumn GROUP jest nielegalne, jeśli nie ma klauzuli GROUP BY

Możesz przepisać zapytanie, aby działało dobrze jako

mysql> SELECT name, MAX(age) FROM t GROUP BY name;

lub

Wyłącz ONLY_FULL_GROUP_BY a błąd powinien zniknąć.

Linki mogą Ci pomóc

  1. Błędy MySQL możesz wyszukiwać tutaj
  2. grupuj według funkcji
  3. podobny post na stackoverflow.com
  4. inne forum, na którym omawiano podobny problem
  5. server-sql-mode

AKTUALIZUJ

To jest odpowiedź na Twój komentarz.

But i would like to know more about disabling the Group BY mode in mysql db.  

Tryby serwera SQL

  • Serwer MySQL może działać w różnych trybach SQL i może stosować te tryby w różny sposób dla różnych klientów, w zależności od wartości sql_mode zmienna systemowa. Możliwość ta umożliwia każdej aplikacji dostosowanie trybu pracy serwera do własnych wymagań.

  • Aby ustawić tryb SQL podczas uruchamiania serwera, użyj --sql-mode="modes" opcja w wierszu poleceń lub sql-mode="modes" w pliku opcji, takim jak my.cnf (Unix operating systems) lub my.ini (Windows) . tryby to lista różnych trybów oddzielonych przecinkami. Aby jawnie wyczyścić tryb SQL, ustaw go na pusty ciąg za pomocą --sql-mode="" w wierszu poleceń lub sql-mode="" w pliku opcji.

  • Aby zmienić tryb SQL w czasie wykonywania, użyj

    SET [GLOBAL|SESSION] sql_mode='modes'
    instrukcja do ustawienia zmiennej systemowej sql_mode. Ustawienie zmiennej GLOBAL wymaga uprawnienia SUPER i wpływa na działanie wszystkich klientów, którzy się od tego czasu łączą. Ustawienie zmiennej SESSION ma wpływ tylko na bieżącego klienta. Każdy klient może w dowolnym momencie zmienić własną wartość sesji sql_mode.

  • Aby określić bieżącą wartość globalną lub sesyjną sql_mode, użyj następujących instrukcji:

    SELECT @@GLOBAL.sql_mode;
    SELECT @@SESSION.sql_mode;

  • Możesz odwołać się do tabeli sql_mode

I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.  

Dzieje się tak z powodu wersji MySQL. Jaka jest wersja MySQL na Twoim lokalnym komputerze?

Jak sprawdzić wersję MySQL?

mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28    |
+-----------+
1 row in set (0.00 sec)    

Do testowania sql_mode ONLY_FULL_GROUP_BY , utworzyłem tabelę patient z dwiema kolumnami id, name i wstawione rekordy. Pamiętaj sql_mode ONLY_FULL_GROUP_BY nie jest ustawiony domyślnie, musisz ustawić, jeśli chcesz.

1) Wersja 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  

Nie udało się, ustawienie trybu sql_mode na ONLY_FULL_GROUP_BY nie miało sensu ponieważ nie zezwala na kolumny niezagregowane, które nie są wymienione w klauzuli GROUP BY.

2) Wersja MySQL społeczność 5.1.40

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

Następnie po ustawieniu 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) Wersja MySQL 5.5.28

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

Następnie po ustawieniu 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  

Wniosek

Jak widać, zapytanie nie powiodło się w wersji 5.0.45 i powiodło się w/po 5.1.40 i 5.5.28 Przed wersją MySQL 5.1.10(nie jestem pewien) zapytanie bez GROUP BY nie powiedzie się niezależnie od sql_mode ONLY_FULL_GROUP_BY ustawić czy nie.

Kilka interesujących błędów i link do trybu sql_mode

  1. ONLY_FULL_GROUP_BY tryb sql jest zbyt restrykcyjny
  2. tryb sql:nie działa tylko pełna grupa według trybu
  3. Często zadawane pytania dotyczące MySQL 5.0:Tryb SQL serwera


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Projekt reprezentujący odprawę i wymeldowanie pracowników

  2. Przejście z bazy danych do sesji

  3. Zaktualizuj bazę danych za pomocą wielu instrukcji SQL

  4. Pobierz dane konkretnego użytkownika w PHP

  5. Java/Mysql..SQLException:Tabela musi zawierać co najmniej 1 kolumnę SQLState:42000 VendorError:1113