Có thể liên quan đến Lỗi MySQL # 41156, Danh sách các bảng dẫn xuất hoạt động giống như một chuỗi tương hỗ truy vấn phụ -nested .
Nhật ký lỗi cho biết nó đã được xác minh dựa trên MySQL 5.0.72, 5.1.30 và 6.0.7.
Đã sửa lỗi trong MySQL 5.1.37, MySQL 5.4.2 (đã trở thành 5.5.something) và NDB 7.1.0 .
Về truy vấn được thiết kế lại của bạn trong câu hỏi ở trên:
Truy vấn tổng hợp có thể phức tạp. Bạn có thể sử dụng phương pháp do Andrew gợi ý trong câu trả lời của anh ấy . Nếu bạn tìm kiếm nhiều giá trị UPC, bạn cần viết mã ứng dụng để tạo truy vấn SQL, thêm vào càng nhiều mệnh đề JOIN bằng số giá trị UPC mà bạn đang tìm kiếm.
MySQL có giới hạn về số lượng phép nối có thể được thực hiện trong một truy vấn duy nhất, nhưng ví dụ bạn không nên đạt đến giới hạn. Tức là, truy vấn bạn hiển thị hoạt động.
Tôi giả sử rằng bạn đang hiển thị một truy vấn mẫu tìm kiếm bốn mã UPC, trong khi ứng dụng của bạn có thể tạo truy vấn động cho một số lượng lớn mã UPC và đôi khi có thể nhiều hơn 61.
Có vẻ như mục tiêu của truy vấn của bạn là trả lại các cửa hàng có ít nhất một trong các mã UPC được liệt kê. Bạn có thể làm điều đó đơn giản hơn trong truy vấn sau:
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');
Bạn có thể sử dụng phương pháp này theo những cách khác, chẳng hạn như để tìm các cửa hàng có tất cả bốn 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;
Hoặc để tìm các cửa hàng có một số nhưng không phải cả bốn cửa hàng của 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;
Hoặc để tìm các cửa hàng thiếu cả bốn 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;
Bạn vẫn phải viết một số mã để tạo truy vấn này, nhưng nó dễ thực hiện hơn một chút và nó không vượt quá bất kỳ giới hạn nào về số lượng liên kết hoặc truy vấn con mà bạn có thể chạy.