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.