首先,學會使用正確的,明確的JOIN
語法。
然後,如果你認爲最大的成本只發生一次,你可以這樣做:
SELECT C.pid
FROM Catalog C JOIN
Suppliers S
ON C.sid = S.sid
WHERE S.sname = 'Yosemite Sham'
ORDER BY c.Cost DESC
FETCH FIRST 1 ROW ONLY ;
注意最後一句是ANSI標準SQL。一些數據庫使用其他方法來實現相同的功能。
沒有這個假設,基本上所有合理的方法都使用子查詢。這是一個不:
SELECT C.pid
FROM Catalog C JOIN
Suppliers S
ON C.sid = S.sid LEFT JOIN
Catalog C2
ON C2.sid = C.sid AND
C2.Cost > C.Cost
WHERE S.sname = 'Yosemite Sham' AND c2.Cost IS NULL
ORDER BY c.Cost DESC;
注:這是假定sid
是1-1 sname
。這是一種方便(很可能是真實的),並有助於避免額外加入Suppliers
。
[不良習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - 在ANSI - ** 92 ** SQL標準中**舊式*逗號分隔的表*樣式列表已替換爲* proper * ANSI'JOIN'語法(**超過20年**之前),其使用是不鼓勵的 –