L'approche la plus efficace consiste généralement à utiliser des fonctions analytiques
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
Vous pouvez également utiliser une sous-requête
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)
Ces deux méthodes renverront plusieurs lignes s'il y a plusieurs quartiers qui sont à égalité pour le budget le plus bas. Avec la méthode de la fonction analytique, vous pouvez utiliser le row_number
fonction plutôt que rank
pour rompre arbitrairement l'égalité si vous souhaitez renvoyer exactement 1 ligne à chaque fois.