MySQL - 计算在另一个表中具有条目的元素(内部联接)

时间:2016-03-31 12:39:01

标签: mysql count inner-join

鉴于以下架构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,因为符合我们条件的唯一条目是14

编辑:这是“正在运作的嵌套查询

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)

我希望在不必使用嵌套查询的情况下实现相同的目标

谢谢, 丹尼尔

1 个答案:

答案 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