java找出价格最低_SQL查询查找每个零件的最低价格的供应商
我需要找到每個(gè)零件價(jià)格最低的供應(yīng)商。
表:供應(yīng)商(sid、sname、地址)、零件(pid、pname、顏色)、目錄(sid、pid、成本)
這是有效的:SELECT
sname, pid
FROM
(SELECT
*
FROM
suppliers
NATURAL JOIN catalog
NATURAL JOIN (SELECT
pid, MIN(cost) AS min_cost
FROM
catalog
GROUP BY (pid)) AS m
HAVING cost = min_cost) AS n
但是,當(dāng)我試圖將其縮短為以下值時(shí),我得到一個(gè)錯(cuò)誤,即having子句中存在未知的成本:
SELECT
sname, pid
FROM
suppliers
NATURAL JOIN
catalog
NATURAL JOIN
(SELECT
pid, MIN(cost) AS min_cost
FROM
catalog
GROUP BY (pid)) AS m
HAVING cost = min_cost
為什么找不到成本?表中的成本不是因?yàn)槲乙褜⒆硬樵兗尤肽夸泦?#xff1f;
編輯
根據(jù)建議,我將其改為使用INNER JOIN,而不是NATURAL JOIN,但仍然會(huì)出現(xiàn)相同的錯(cuò)誤。新查詢:
SELECT
s.sname, m.pid
FROM
suppliers s
INNER JOIN
catalog c ON s.sid = c.sid
INNER JOIN
(SELECT
pid, MIN(cost) AS min_cost
FROM
catalog
GROUP BY (pid)) AS m ON c.pid = m.pid
HAVING cost = min_cost
編輯2
問題不是JOIN而是HAVING,正如bbrumm的回答所示,實(shí)際上應(yīng)該是WHERE。
最佳答案:
我建議這樣一個(gè)問題:SELECT
supplier.sname,
catalog.pid
FROM suppliers
INNER JOIN catalog ON suppliers.supplier_id = catalog.supplier_id
INNER JOIN
(SELECT
pid, MIN(cost) AS min_cost
FROM catalog
GROUP BY (pid)) AS m
ON catalog.pid = m.pid
WHERE catalog.cost = m.min_cost;
我對您的列名(如供應(yīng)商id)做了一些假設(shè),您可能需要更改。可以指出,“cost=min_cost”是連接的一部分,因此它也可以到達(dá)那里。我也沒有包含表別名,因?yàn)殡m然這是最佳實(shí)踐,但不是必需的。
總結(jié)
以上是生活随笔為你收集整理的java找出价格最低_SQL查询查找每个零件的最低价格的供应商的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各类数据类型的用法java_Java各种
- 下一篇: MySql数据库explain用法示例_