我有两个具有多对一关系的表,我将它们称为 Parent_Table 和 Child_Table (即父母有零个或多个孩子,但孩子只有一个父母)。我需要计算至少有一个孩子满足某些条件的父母的数量。哪个查询是最佳的?
选项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>
还是完全是别的东西?它取决于每个表的大小,还是两个条件的复杂性,或者数据是否排序?
编辑:数据库是甲骨文。