Может быть связано с
MySQL bug # 41156, Список производных таблиц действует как цепочка взаимно вложенных подзапросов .
Журнал ошибок показывает, что он проверен на соответствие MySQL 5.0.72, 5.1.30 и 6.0.7.
Исправлено в MySQL 5.1.37, MySQL 5.4.2 (который стал 5.5.something) и NDB 7.1.0.
Относительно вашего измененного запроса в вопросе выше:
Сводные запросы могут быть сложными. Вы можете использовать метод, предложенный Эндрю в его ответ . Если вы ищете много значений UPC, вам нужно написать код приложения для построения SQL-запроса, добавив столько предложений JOIN, сколько искомых значений UPC.
В MySQL есть ограничение на число объединений, которые могут быть выполнены в одном запросе, но пример, который вы не должны достигать, ограничен. То есть показанный вами запрос работает.
Я предполагаю, что вы показываете пример запроса с поиском четырех кодов UPC, в то время как ваше приложение может построить запрос динамически для большего количества кодов UPC, а иногда это может быть больше 61.
Похоже, цель вашего запроса - вернуть магазины, в которых есть хотя бы один из перечисленных кодов UPC. Вы можете сделать это проще в следующем запросе:
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');
Вы можете использовать этот метод другими способами, например, чтобы найти магазины, в которых есть все четыре 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;
Или найти магазины, которые некоторые, но не все четыре из СКП:
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;
Или найти магазины, в которых отсутствуют все четыре СКП:
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;
Вам все еще нужно написать некоторый код для построения этого запроса, но это немного проще сделать, и оно не превышает ограничений на количество соединений или подзапросов, которые вы можете запустить.