Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Query MySQL tidak valid:Tingkat nesting yang terlalu tinggi untuk dipilih

Mungkin terkait denganBug MySQL #41156, Daftar tabel turunan bertindak seperti rantai saling -subkueri bersarang .

Log bug menunjukkan itu diverifikasi terhadap MySQL 5.0.72, 5.1.30, dan 6.0.7.
Diperbaiki di MySQL 5.1.37, MySQL 5.4.2 (yang menjadi 5.5.something), dan NDB 7.1.0 .

Mengenai kueri Anda yang didesain ulang dalam pertanyaan di atas:

Kueri pivot bisa jadi rumit. Anda dapat menggunakan metode yang disarankan oleh Andrew di jawabannya . Jika Anda mencari banyak nilai UPC, Anda perlu menulis kode aplikasi untuk membuat kueri SQL, menambahkan klausa GABUNG sebanyak jumlah nilai UPC yang Anda cari.

MySQL memang memiliki batasan jumlah gabungan yang dapat dilakukan dalam satu kueri, tetapi contoh Anda seharusnya tidak mencapai batas tersebut. Artinya, kueri yang Anda tampilkan berfungsi.

Saya berasumsi bahwa Anda menunjukkan contoh kueri yang menelusuri empat kode UPC, sedangkan aplikasi Anda dapat membuat kueri secara dinamis untuk sejumlah besar kode UPC, dan terkadang lebih dari 61.

Sepertinya tujuan kueri Anda adalah mengembalikan toko yang memiliki setidaknya satu kode UPC yang terdaftar. Anda dapat melakukannya dengan lebih sederhana dalam kueri berikut:

SELECT DISTINCT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');

Anda dapat menggunakan metode ini dengan cara lain, misalnya untuk menemukan toko yang memiliki keempat UPC:

SELECT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');
GROUP BY s.e_address
HAVING COUNT(DISTINCT upc) = 4;

Atau untuk menemukan toko yang beberapa tetapi tidak keempat UPC:

SELECT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');
GROUP BY s.e_address
HAVING COUNT(DISTINCT upc) < 4;

Atau untuk menemukan toko yang tidak memiliki keempat UPC:

SELECT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');
WHERE cr.e_address IS NULL;

Anda masih harus menulis beberapa kode untuk membuat kueri ini, tetapi ini sedikit lebih mudah dilakukan, dan tidak melebihi batas jumlah gabungan atau subkueri yang dapat Anda jalankan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengacak kumpulan data besar

  2. MySQL mengimpor database tetapi mengabaikan tabel tertentu

  3. Formulir HTML / Php tidak ditambahkan ke database SQL

  4. Batasan kriteria umum di Hibernate untuk semua kueri untuk semua tabel

  5. Yii2 Bagaimana cara melakukan pengelompokan kondisi AND atau OR?