这是我的模式Suppliers(sid,名称,地址) Cata(sid,pid,cost)部件(pid,pname,color)
粗体是我正在尝试编写的查询“查找最昂贵部件的pids”的主键,我在这里使用的是set差异,这里是我的查询,但是它返回目录中的所有pids,而不是成本最高的
select Cata.pid
from Cata
where pid not in(
select c.pid
from Cata c, Cata f
where c.sid=f.sid AND c.pid=f.pid AND c.cost<f.cost
);发布于 2018-02-27 22:26:44
试试这个:
select c1.pid
from Cata c1
where not exists (
select c2.pid
from Cata c2
where c2.cost > c1.f.cost
);如果您想知道查询有什么问题,请注意内部SELECT正在返回0行,因为您正在将项目的成本与其自身进行比较,因此c.cost总是等于f.cost,因此<比较失败,因此内部select返回0行,因此所有行的"not in“条件都是正确的
发布于 2018-02-27 22:44:05
如果您想要具有单个最高成本的pid:
SELECT TOP 1 WITH TIES
c.pid,
c.cost
FROM
Cata AS c
ORDER BY
c.cost DESC如果您想要五个成本最高的pids,请将其第一行更改为:
SELECT TOP 5 WITH TIES发布于 2018-02-27 22:29:24
我想这就是你要找的
SELECT
p.PID
, MAX(c.COST)
FROM
Parts p
LEFT JOIN
Cata c
ON p.PID = c.PID
GROUP BY
p.PID
ORDER BY
MAX(c.COST)这将返回您最昂贵的部分按PID。
祝好运!
https://stackoverflow.com/questions/49018883
复制相似问题