Я пытаюсь создать инструкцию select. Я хочу выбрать записи, содержащие все записи из подзапроса.Выберите записи, если они содержат все результаты подзапроса
У меня есть подзапрос, как:
SELECT P.pid
FROM Parts P
INNER JOIN Manifacturers M INNER JOIN M.mid ON P.pid
WHERE M.name = 'Mercedes'
Я хочу, чтобы выбрать поставщиков, если они продают все эти части. Я пробовал пару вещей:
SELECT s.name
FROM Suppliers S
INNER JOIN Parts P1 ON S.pid = P1.pid
WHERE p1.pid IN (SELECT P.pid
FROM Parts P
INNER JOIN Manifacturers M INNER JOIN M.mid ON P.pid
WHERE M.name = 'Mercedes')
Это явно не удалось. Это возвращает поставщиков, если у них есть какие-либо детали. На самом деле мне удается сблизиться с помощью INTERSECT:
SELECT P1.pid
FROM Suppliers S
INNER JOIN Parts P1 ON S.pid = P1.pid
INTERSECT
SELECT P.pid
FROM Parts P
INNER JOIN Manifacturers M INNER JOIN M.mid ON P.pid
WHERE M.name = 'Mercedes'
Это возвращает правильный ИДП, но этот синтаксис не позволяет мне вернуться s.name. Это не позволит мне добавить какое-либо поле, которое не существует во втором запросе.
@Matt Исправить 'CASE'. Но не см., Как вы можете упростить производную таблицу, вам нужно иметь базу со всей частью и поставщиком, прежде чем делать «LEFT JOIN» –
Ой, я вижу это ... сначала я использую соединение с Производитель, но уже осознает Поставщика есть 'Pid'. –
Да, это не biggie в любом случае, я просто думал, что это было чище без него. хороший ответ – Matt