java找出价格最低_SQL查询查找每个零件的最低价格的供应商
我需要找到每個零件價格最低的供應商。
表:供應商(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
但是,當我試圖將其縮短為以下值時,我得到一個錯誤,即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
為什么找不到成本?表中的成本不是因為我已將子查詢加入目錄嗎?
編輯
根據建議,我將其改為使用INNER JOIN,而不是NATURAL JOIN,但仍然會出現相同的錯誤。新查詢:
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的回答所示,實際上應該是WHERE。
最佳答案:
我建議這樣一個問題: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;
我對您的列名(如供應商id)做了一些假設,您可能需要更改。可以指出,“cost=min_cost”是連接的一部分,因此它也可以到達那里。我也沒有包含表別名,因為雖然這是最佳實踐,但不是必需的。
總結
以上是生活随笔為你收集整理的java找出价格最低_SQL查询查找每个零件的最低价格的供应商的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各类数据类型的用法java_Java各种
- 下一篇: MySql数据库explain用法示例_