A abordagem mais eficiente é geralmente usar funções analíticas
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
Você também pode, no entanto, usar uma subconsulta
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)
Ambos os métodos retornarão várias linhas se houver várias alas vinculadas ao menor orçamento. Com o método de função analítica, você pode usar o
row_number
função em vez de rank
para desempate arbitrariamente se você quiser retornar exatamente 1 linha todas as vezes.