Parent_TableとChild_Tableと呼ぶ多対1の関係を持つ2つのテーブルがあります(つまり、親には0個以上の子がありますが、子には1つの親があります)。何らかの条件を満たす子供が少なくとも1人いる親の数を数える必要があります。どのクエリが最適ですか?
オプション1(これではないことは間違いありません)
SELECT COUNT(DISTINCT(pt.ID))
FROM PARENT_TABLE pt
JOIN CHILD_TABLE ct
ON pt.ID = ct.PARENT_ID
WHERE <parent meets some condition>
AND <child meets some condition>
オプション2
SELECT COUNT(pt.ID)
FROM PARENT_TABLE pt
WHERE pt.ID in
(
SELECT ct.PARENT_ID
FROM CHILD_TABLE ct
WHERE <child meets condition>
)
AND <parent meets some condition>
オプション3(私の推測では最速)
SELECT COUNT(pt.ID)
FROM PARENT_TABLE pt
WHERE EXISTS
(
SELECT 1
FROM CHILD_TABLE ct
WHERE ct.PARENT_ID = pt.ID
AND <child meets condition>
)
AND <parent meets some condition>
それともまったく別のものですか?各テーブルのサイズ、2つの条件の複雑さ、またはデータが並べ替えられているかどうかによって異なりますか?
編集:データベースはOracleです。