Вот моя схема:SQL: Помощь с вложенными запросами
Поставщики (с.и.д.: целочисленные, SNAME: строка, строка адреса)
части (PID: целое число, PNAME: строка, цвет: строка)
Каталог (с.и.д.: целое число, Pid: целое число, стоимость: реальный)
полужирный указывает первичный ключ.
Я хочу написать запрос, чтобы найти всех поставщиков, которые снабжают каждую деталь. Вот два запроса у меня есть уже:
-- get all parts for a given supplier
SELECT Parts.pid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Suppliers.sid = 4;
-- gets all parts that exist
SELECT Parts.pid
FROM Parts
То, что я хочу сделать, в императивных условиях, что-то вроде этого:
Define result set
Foreach Supplier:
If the list of parts produced by a supplier
is equal to the total list of parts, add this supplier to the result set
Return result set
Как я могу перевести это в MySQL?
Я собирался предложить глядя в UNION и MINUS ... потом я вспомнил, что MySQL не поддерживает MINUS, поэтому вам придется найти способ подделать его (и там * есть * пути). Но, как правило, я бы сказал, что если вы вычтите список поставщиков из списка «ВСЕ ДЕТАЛИ», и у вас что-то осталось, то этот поставщик не будет поставлять все детали. – FrustratedWithFormsDesigner