De efficiëntere benadering is over het algemeen het gebruik van analytische functies
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
U kunt echter ook een subquery gebruiken
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)
Beide methoden retourneren meerdere rijen als er meerdere afdelingen zijn die zijn gekoppeld aan het laagste budget. Met de analytische functiemethode kunt u het row_number
. gebruiken functie in plaats van rank
om de gelijkspel willekeurig te verbreken als u elke keer precies 1 rij wilt retourneren.