Найдите сторонних поставщиков, которые поставляют каждую деталь

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.

Ответы на вопрос(1)

Ваш ответ на вопрос