鉴于以下架构http://sqlfiddle.com/#!9/dbc328,我有两个表:
名称
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
。我知道我可以通过使用嵌套查询来实现这一点,但我想知道是否可以使用单个查询来完成。
编辑:预期的响应应该是包含单个字段的单行' cnt'应返回每个有3个地址的名称数。
e.g。在这种情况下,回复应为2
,因为符合我们条件的唯一条目是1
和4
编辑:这是“正在运作的嵌套查询
”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)
我希望在不必使用嵌套查询的情况下实现相同的目标
谢谢, 丹尼尔
答案 0 :(得分:0)
SELECT COUNT(*) AS total
FROM
(SELECT a.nameId
FROM `names` n
INNER JOIN `addresses` a ON a.nameId = n.id
GROUP BY n.id
HAVING count(a.id) = 3) AS TEMP