Подсчет родительских строк, которые имеют детей - PullRequest
0 голосов
/ 17 января 2012

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 17 января 2012

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

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)
1 голос
/ 17 января 2012

Вам нужно только вставить ключевое слово DISTINCT в ваш COUNT (внутреннее объединение содержит только строки из таблицы A, у которых есть дочерние элементы в таблице B)

SELECT COUNT(DISTINCT tableA.id) AS count
FROM (tableA)
JOIN tableB ON tableB.tableA_id = tableA.id
0 голосов
/ 17 января 2012

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...