MySQL, mà bạn có vẻ đang sử dụng, không hỗ trợ INTERSECT
cú pháp. Bạn sẽ phải giải quyết nó theo cách khác.
Trong trường hợp này, nó là nhỏ - chúng tôi chỉ cần một danh sách tất cả các nhà cung cấp cung cấp "màu xanh lá cây" và "màu đỏ" của một số bộ phận- truy vấn của bạn không bận tâm xem liệu bản thân các bộ phận có liên quan với nhau hay không, vì vậy chúng tôi có thể giải quyết nó khá dễ dàng như thế này:
SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color IN ('red', 'green')
GROUP BY Suppliers.sid
HAVING COUNT(DISTINCT Parts.color) = 2
Cá nhân tôi không tin rằng truy vấn ban đầu là một INTERSECT
điển hình vấn đề. Hãy xem JOIN
giải pháp do Vinko Vrsalovic cung cấp cho một giải pháp chung để mô phỏng INTERSECT
(mà tôi muốn btw thích hơn ngay cả khi RDBMS trên thực tế sẽ cung cấp INTERSECT
nguyên bản).