MySQLバグ#41156に関連している可能性があります。派生テーブルのリストは相互のチェーンのように機能します-ネストされたサブクエリ 。
バグログは、MySQL 5.0.72、5.1.30、および6.0.7に対して検証されたことを示しています。
MySQL 5.1.37、MySQL 5.4.2(5.5.somethingになりました)、およびNDB7.1.0で修正されました。 。
上記の質問で再設計されたクエリについて:
ピボットクエリには注意が必要です。 Andrewが
MySQLには、1つのクエリで実行できる結合の数に制限がありますが、例では制限に達していません。つまり、表示するクエリは機能します。
4つのUPCコードを検索するクエリの例を示していると仮定しますが、アプリはより多くのUPCコードに対して動的にクエリを作成する場合があり、61を超える場合もあります。
クエリの目的は、リストされているUPCコードの少なくとも1つを含むストアを返すことであるようです。次のクエリでそれをより簡単に行うことができます:
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');
この方法を他の方法で使用することもできます。たとえば、4つすべての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;
または、UPCの4つすべてではなく一部の店舗を見つけるには:
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;
または、UPCの4つすべてが不足している店舗を見つけるには:
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;
このクエリを作成するには、まだいくつかのコードを作成する必要がありますが、実行するのは少し簡単で、実行できる結合またはサブクエリの数の制限を超えることはありません。