L'approccio più efficiente è generalmente quello di utilizzare funzioni analitiche
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
Tuttavia, puoi anche utilizzare una sottoquery
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)
Entrambi questi metodi restituiranno più righe se ci sono più reparti che sono legati per il budget più basso. Con il metodo della funzione analitica, puoi usare il row_number
funzione anziché rank
per rompere arbitrariamente il pareggio se vuoi restituire esattamente 1 riga ogni volta.