我对一些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.
答案 0 :(得分:1)
您必须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
仅选择两种颜色的零件后,只有供应商提供一种或两种颜色。
条件having count(distinct p.color) = 2
仅返回同时提供两种颜色的供应商。
min()
和max()
返回2种颜色。在这种情况下,实际上并不需要它们,但我更喜欢使用它们,而不是对其进行硬编码。