首页 > 解决方案 > 找出只供应红色零件的供应商

问题描述

又是一个sql问题。

我要做的第一件事是加入表格:从 cat c JOIN 部分 p ON c.PID=p.PID 中选择 SID;我尝试了 having 子句,但我没有聚合函数并且使用“where”是没用的,因为我得到了所有供应红色部分的供应商。

有普遍的答案吗?这样我也可以获得只提供绿色零件的供应商吗?

需要的输出:

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.

感谢您的大力帮助。

标签: sqldb2

解决方案


你确实想要聚合。一种方法是使用min()and比较颜色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'

推荐阅读