我有一个关于一些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 种颜色。在这种情况下,它们并不是真正需要的,但我更喜欢使用它们而不是硬编码它们。