[英]select a pair from an SQL table
我想选择一对符合特定要求的供应商ID,即第一个供应商收取的费用高于某个部分的第二个供应商ID。
SELECT DISTINCT S1.sid, S2.sid
FROM suppliers JOIN catalog ON (suppliers.sid = catalog.sid) AS S1,
suppliers JOIN catalog ON (suppliers.sid = catalog.sid) AS S2
WHERE S1.pid = S2.pid AND S1.cost > S2.cost;
现在这不起作用。 谁能告诉我问题出在哪里?
您在表达联接的方式上犯了一个错误:对于添加到查询中的每个表,不需要重复左侧的表(即suppliers
)。
以下是使用表别名修复查询的方法:
SELECT DISTINCT S1.sid, S2.sid
FROM suppliers s
JOIN catalog s1 ON s.sid=s1.sid
JOIN catalog s2 ON s.sid=s2.sid
WHERE S1.pid=S2.pid AND S1.cost>S2.cost
您的查询的一个问题是您在from
子句中多次使用相同的表而没有表别名来区分不同的引用。
这是一种不同的方法,它使用CTE组合suppliers
和catalogs
,然后是简单的连接:
with sc as (
select s1.sid, pid, cost
from suppliers s1 join
catalog c1
on s1.sid = c1.sid
)
select distinct sc1.sid, sc2.sid
from sc sc1 join
sc sc2
on sc1.pid = sc2.pid and sc1.cost > sc2.cost;
这个请求似乎是一个奇怪的请求 - 如果你有一个给定部分的多个供应商,你会得到很多行。
编辑:
令我感到震惊的是你根本不需要suppliers
表:
select distinct c1.sid, c2.sid
from catalog c1 join
catalog c2
on c1.pid = c2.pid and c1.cost > c2.cost;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.