Найдите сторонних поставщиков, которые поставляют только красные детали - PullRequest
0 голосов
/ 10 июля 2019

снова вопрос sql.

Первое, что я делаю, это присоединяюсь к таблицам: Выберите SID из cat c JOIN part p ON c.PID = p.PID;Я пробовал предложение «Имею», но у меня нет агрегатной функции, и использование «где» бесполезно, потому что тогда я получаю всех поставщиков, которые поставляют красную часть.

Есть ли обобщенный ответ?так что я могу также получить поставщика, который обеспечивает только зеленые части?

Необходимые результаты:

SID   
-----   
S2

Предоставленные таблицы:

SELECT * FROM parts 

PID   PNAME      COLOR      WEIGHT CITY       
----- ---------- ---------- ------ ---------- 
P1    Nut        red            13 London     
P2    Bolt       black          18 Paris      
P3    Screw      red            17 Rome       
P4    Screw      silver         14 London     
P5    Cam        trans          12 Paris      
P6    Cog        cyan           19 London     
P7    Nut        magenta        15 -          
P8    Wheel      red            15 Munich     
P9    Bearing    green          15 Milano     

  9 record(s) selected. 


SELECT * FROM catalog 

SID   PID   COST         
----- ----- ------------ 
S1    P3            0.50 
S1    P4            0.50 
S1    P8           11.70 
S2    P1           16.50 
S2    P3            0.55 
S2    P8            7.95 
S3    P8           12.50 
S3    P9            1.00 
S4    P5            2.20 
S4    P6      1247548.23 
S4    P7      1247548.23 

  11 record(s) selected.

Спасибо за вашбольшая помощь.

1 Ответ

0 голосов
/ 10 июля 2019

Вы хотите агрегацию. Один из методов - сравнить цвета, используя min() и max():

select c.SID
from cat c JOIN
     part p
     ON c.PID = p.PID
group by c.SID
having min(p.color) = max(p.color) and  -- all colors are the same
       min(p.color) = 'red'             -- and that color is 'red'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...