我有選擇選擇
SELECT e.*, b.f1, b.fee FROM eq e JOIN br b ON e.country = b.country
WHERE e.name= 'some' AND b.fee = 1
我需要重寫選擇一個替代AND b.fee = 1
到AND b.fee = min fee from b
我不能....我可以AND b.fee = (SELECT MIN(fee)FROM br)
但不好解決
我有選擇選擇
SELECT e.*, b.f1, b.fee FROM eq e JOIN br b ON e.country = b.country
WHERE e.name= 'some' AND b.fee = 1
我需要重寫選擇一個替代AND b.fee = 1
到AND b.fee = min fee from b
我不能....我可以AND b.fee = (SELECT MIN(fee)FROM br)
但不好解決
如果你只想要一個行,那麼就使用limit
:
SELECT e.*, b.f1, b.fee
FROM eq e JOIN
br b
ON e.country = b.country
WHERE e.name = 'some'
ORDER BY b.fee
LIMIT 1;
如果你想以最小的自由都行,那麼這裏是一個方法:
SELECT e.*, b.f1, b.fee
FROM eq e JOIN
(SELECT b.*, MIN(fee) OVER() as minfee
FROM br b
) b
ON e.country = b.country
WHERE e.name = 'some' AND b.fee = minfee;
ORDER BY b.fee LIMIT 1; - 如果有很多記錄,這不是一項繁重的操作? – user5620472
@ user5620472。 。 。如果你沒有「收費」指數,它幾乎與其他獲得最低限度的方式一樣昂貴。如果您有索引,則順序可能會或可能無法利用它。 –
編輯你的問題,並提供樣本數據和預期的結果。 –