По-ефективният подход обикновено е използването на аналитични функции
SELECT hospitalcode,
name,
ward,
annualbudget
FROM (SELECT h.hospitalcode,
h.name,
w.wardno,
w.annualbudget,
rank() over (order by w.annualbudget asc) rnk
FROM hospital h
JOIN ward w
ON (h.hospitalcode = w.hospitalcode))
WHERE rnk = 1
Можете също така да използвате подзаявка
SELECT h.hospitalcode,
h.name,
w.wardno,
w.annualbudget
FROM hospital h
JOIN ward w
ON (h.hospitalcode = w.hospitalcode)
WHERE w.annualbudget = (SELECT MIN(annualbudget)
FROM ward)
И двата метода ще върнат множество редове, ако има няколко отделения, които са обвързани с най-ниския бюджет. С метода на аналитичната функция можете да използвате row_number
функция, а не rank
за произволно прекъсване на равенството, ако искате да връщате точно 1 ред всеки път.