У меня есть две таблицы с отношением «многие к одному», которые я назову 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>
Или это что-то совсем другое? Зависит ли это от размеров каждой таблицы, от сложности двух условий или от того, отсортированы ли данные?
РЕДАКТИРОВАТЬ: База данных - это Oracle.