Учитывая следующую схему http://sqlfiddle.com/#!9/dbc328 У меня есть две таблицы:MySQL - подсчитывать элементы, имеющие записи в другой таблице (внутреннее соединение)
имена
id
name
и
адреса
id
nameId
address
Мне нужно выяснить, сколько ресурсов в names
имеет определенное количество адресов, например, 3 адреса.
Используя следующий запрос:
SELECT n.id
FROM `names` n
INNER JOIN `addresses` a on a.nameId = n.id
group by n.id
having count(a.id) = 3
я могу узнать, какие являются теми именами, но мне нужно count()
.
При попытке использовать счета, такие как
SELECT count(n.id) as cnt
FROM `names` n
INNER JOIN `addresses` a on a.nameId = n.id
group by n.id
having count(a.id) = 3
не работает, потому что я использую group by
. Я знаю, что могу достичь этого, используя вложенные запросы, но я хочу знать, можно ли это сделать с помощью одного запроса.
EDIT: ожидаемый ответ должен состоять из одной строки, содержащей одно поле «cnt», которое должно возвращать число имен, имеющих по 3 адреса.
например. ответ должен быть 2
в этом случае, так как только те записи, которые соответствуют нашим критериям, 1
и 4
EDIT: Вот Вложенный запрос, который работает
select count(n.id) as cnt
from `names` n
where n.id IN (SELECT n.id
FROM `names` n
INNER JOIN `addresses` a on a.nameId = n.id
group by n.id
having count(a.id) = 3)
Я хочу, чтобы достичь того же, без необходимости использовать вложенный запрос
Спасибо, Daniel
, что ваш ожидаемый результат, как ре Ваша таблица? – Sadikhasan
Ожидаемый ответ должен состоять из одной строки, содержащей одно поле «cnt», которое должно возвращать количество записей в таблице «names», каждая из которых имеет по 3 адреса. – Daniel
Вы должны использовать свой запрос в качестве подзапроса и применять 'count' во внешнем запросе. –