A JOIN
может умножить количество строк, а также отфильтровать строки.
В этом случае второй счет должен быть правильным, поскольку ничто не учитывается дважды - при условии, что id
уникальный в a
. Если нет, то ему нужно count(distinct a.id)
.
Для эквивалентного использования JOIN
будет использоваться COUNT(DISTINCT)
:
select count(distinct a.id)
from A a join
B b
on a.id = b.id join
C c
on B.id = C.id;
Я упоминаю это для полноты , но не рекомендую этот подход . Умножение количества строк только для их удаления с использованием distinct
неэффективно.
Во многих базах данных наиболее эффективным методом может быть:
select count(*)
from a
where exists (select 1 from b where b.id = a.id) and
exists (select 1 from c where c.id = a.id);
Примечание. Предполагается, что индексы на столбцы id
и id
являются уникальными в a
.