MySQL, dat u lijkt te gebruiken, ondersteunt de INTERSECT
syntaxis. Je zult het op een andere manier moeten oplossen.
In dit geval is het triviaal - we hebben alleen een lijst nodig van alle leveranciers die "groen" en "rood" van een onderdeel aanbieden - uw vraag neemt niet de moeite om te zien of de onderdelen zelf gerelateerd zijn, dus we kunnen het vrij gemakkelijk oplossen zoals dit:
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
Persoonlijk geloof ik niet dat de oorspronkelijke zoekopdracht een typische INTERSECT
is probleem. Bekijk de JOIN
oplossing aangeboden door Vinko Vrsalovic voor een algemene oplossing voor het emuleren van de INTERSECT
(waar ik trouwens de voorkeur aan zou geven, zelfs als de RDBMS in feite INTERSECT
zou aanbieden native).