より効率的なアプローチは、一般的に分析関数を使用することです
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行を返したい場合は、任意にタイを解除します。