2012-01-17 1 views
0

Таблица A содержит несколько строк, некоторые из которых имеют (несколько) дочерних элементов в таблице B. Мне нужно подсчитать строки в таблице A, имеющие дочерние элементы.Подсчитайте родительские строки, у которых есть дочерние объекты

На данный момент у меня

SELECT count(tableA.id) as count 
FROM (tableA) 
JOIN tableB ON tableB.tableA_id = tableA.id 

К сожалению, это также считается несколько детей из TableB в счете. Есть ли способ предотвратить это?

ответ

1

Вам нужно только положить DISTINCT ключевое слово в вашем COUNT (внутреннее соединение содержит только строки из TABLEA, которые имеют детей в TableB)

SELECT COUNT(DISTINCT tableA.id) AS count 
FROM (tableA) 
JOIN tableB ON tableB.tableA_id = tableA.id 
2

Это должно работать:

SELECT count(tableA.id) as count 
FROM (tableA) 
where id in (select tableA_id from tableB) 

Или, используя EXISTS:

SELECT count(tableA.id) as count 
FROM (tableA) 
where exists (select 1 from tableB where tableB.tableA_id = tableA.id) 
+0

может объяснить, почему это будет работать в ОП? –

+0

Я нахожу EXISTS более высокой производительности чаще, чем DISTINCT. – davidethell

0

Пару альтернатив:

SELECT count(distinct tableA.id) as `count` 
FROM tableA 
JOIN tableB ON tableB.tableA_id = tableA.id 

или:

SELECT count(*) as `count` 
FROM (tableA) 
where exists 
(select null from tableB where tableB.tableA_id = tableA.id) 
Смежные вопросы