我如何 Select SQL 中相同属性的 2 个值
How do I Select 2 Values of the same Attribute in SQL
我有 3 个不同的表,其中包含:
suppliers (sid; sname; adress)
parts(pid; pname; color)
catalog (sid; pid; cost)
现在我必须获取供应商的 SID,供应商提供红色部分和绿色部分。
结果应该是这样的:
SID Color1 Color2
--- --------- ------
S1 green red
我不明白,我必须对 select 同一属性 Color
的 2 个值做些什么。我必须使用子查询吗?
您可以使用聚合和 having
子句:
select s.sid
from suppliers s join
catalog c
on s.sid = c.sid join
products p
on c.pid = p.id
where p.color in ('green', 'red')
group by s.id
having count(distinct p.color) = 2;
为了获得两个 列 ,您必须加入产品 table 两次。虽然这可行,但它无法扩展(假设您必须扩展到 10 种不同的颜色...)。
所以 Gordon Linoff 的上述答案有效,并且 return 每种颜色在单独的行中,具有相同的 sid
,如下所示:
SID Color
--- -----
S1 red
S1 green
将其分为两列(如果你真的想这样做):
SELECT s.sid, p1.color, p2.color
FROM suppliers s
JOIN cataglog c ON c.sid=s.sid
JOIN products p1 ON p1.pid=c.pid
LEFT JOIN products p2 ON p2.pid=c.pid AND p2.color != p1.color
GROUP BY s.sid
LEFT JOIN 第二个产品table,因为没有副色。
同样,这很丑陋并且无法缩放,我建议使用 multi-row 解决方案。
我有 3 个不同的表,其中包含:
suppliers (sid; sname; adress)
parts(pid; pname; color)
catalog (sid; pid; cost)
现在我必须获取供应商的 SID,供应商提供红色部分和绿色部分。
结果应该是这样的:
SID Color1 Color2
--- --------- ------
S1 green red
我不明白,我必须对 select 同一属性 Color
的 2 个值做些什么。我必须使用子查询吗?
您可以使用聚合和 having
子句:
select s.sid
from suppliers s join
catalog c
on s.sid = c.sid join
products p
on c.pid = p.id
where p.color in ('green', 'red')
group by s.id
having count(distinct p.color) = 2;
为了获得两个 列 ,您必须加入产品 table 两次。虽然这可行,但它无法扩展(假设您必须扩展到 10 种不同的颜色...)。
所以 Gordon Linoff 的上述答案有效,并且 return 每种颜色在单独的行中,具有相同的 sid
,如下所示:
SID Color
--- -----
S1 red
S1 green
将其分为两列(如果你真的想这样做):
SELECT s.sid, p1.color, p2.color
FROM suppliers s
JOIN cataglog c ON c.sid=s.sid
JOIN products p1 ON p1.pid=c.pid
LEFT JOIN products p2 ON p2.pid=c.pid AND p2.color != p1.color
GROUP BY s.sid
LEFT JOIN 第二个产品table,因为没有副色。
同样,这很丑陋并且无法缩放,我建议使用 multi-row 解决方案。