Найдите сторонних поставщиков, которые поставляют каждую деталь
3 таблицы: поставщики (sid, sname, адрес), запчасти (pid, pname, color), каталог (sid, pid, стоимость)
Ответ, чтобы найти всех поставщиков, которые поставляют каждую часть:
SELECT C.sid
FROM Catalog C
WHERE NOT EXISTS (
SELECT P.pid
FROM Parts P
WHERE NOT EXISTS (
SELECT C1.sid
FROM Catalog C1
WHERE C1.sid = C.sid
AND C1.pid = P.pid
)
)
Может ли кто-нибудь объяснить мне этот ответ? Я просто немного растерялся!
Я слышал, что это объясняется как «Найти поставщиков так, чтобы не было части, которую они не продают», но я изо всех сил пытаюсь понять, как
SELECT C1.sid
FROM Catalog C1
WHERE C1.sid = C.sid
AND C1.pid = P.pid
)
выполняет это.
Так что если у меня есть
Каталожный стол
Джеймс | молоток
Джеймс | наковальня
Джеймс | Гаечный ключ
Генри | молоток
Леруа | наковальня
Таблица деталей
молоток
наковальня
Гаечный ключ
Затем, после самого внутреннего предложения, что именно возвращается?
Это
Джеймс | молоток
Джеймс | наковальня
Джеймс | Гаечный ключ
Генри | молоток
Леруа | наковальня
а то НЕ СУЩЕСТВУЕТ
Джеймс | -
Генри | Наковальня, гаечный ключ
Леруа | Молоток, гаечный ключ?
Как из таблицы деталей вычитаются эти значения? Извините, если эти вопросы не слишком ясны, я все еще плохо знаком с SQL.