查找提供红色部件和绿色部件的供应商的SID



我有一个关于一些SQL的问题。

非常感谢您的帮助。

我尝试连接两个表,但我不知道如何获得所需的输出。

Select SID, COLOR from cat c1 JOIN par p ON c1.PID = p.PID;
SID  COLOR     
---  ---------
S1  red       
S1  silver    
S1  red       
S2  red       
S2  red       
S2  red       
S3  red       
S3  green     
S4  trans     
S4  cyan      
S4  magenta

这是我需要的输出:

SID    COLOR1       COLOR2     
-----  ----------  ---------- 
S3     green        red

以下是提供的表格:

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.

您必须group by cat.sid并将条件放在 HAVING 子句中:

select 
  c.sid, 
  min(p.color) color1 ,
  max(p.color) color2
from cat c inner join par p 
on c.pid = p.pid
where p.color in ('green', 'red')
group by c.sid
having count(distinct p.color) = 2

仅选择具有 2 种颜色的零件后,将只有供应商提供 1 种或两种颜色。
条件having count(distinct p.color) = 2仅返回提供两种颜色的供应商。
min()max()返回 2 种颜色。在这种情况下,它们并不是真正需要的,但我更喜欢使用它们而不是硬编码它们。

最新更新