0

我有两个表,“名称”和“地址”。我想列出在表“名称”中多次出现的所有表“名称”中的last_name和连接。address.street_addresslast_name

这两个表在“name_id”列上连接。

所需的输出将如下所示:

213 | smith | 123 bluebird | 
14  | smith | 456 first ave |
718 | smith | 12 san antonia st. |
244 | jones | 78 third ave # 45 |
98  | jones | 18177 toronto place |

请注意,如果 last_name "abernathy" 在表 "name" 中只出现一次,那么 "abernathy" 不应包含在结果中。

到目前为止,这是我想出的:

SELECT name.name_id, name.last_name, address.street_address, count(*)
FROM `name`
JOIN `address` ON name.name_id = address.name_id
GROUP BY `last_name`
HAVING count(*) > 1

但是,这只会为每个姓氏生成一行。我想列出所有姓氏。我知道我错过了一些简单的东西。任何帮助表示赞赏,谢谢!

4

3 回答 3

2

采用:

SELECT t.name_id,
       t.last_name,
       a.street_address
  FROM NAME t
  JOIN ADDRESS a ON a.name_id = t.name_id
  JOIN (SELECT n.last_name
          FROM NAME n
      GROUP BY n.last_name
        HAVING COUNT(*) > 1) nn ON nn.last_name = t.last_name
于 2009-10-22T00:47:38.753 回答
1

您可以使用如下子查询,或者如果您愿意,也可以使用相同的想法加入派生表。

SELECT name.name_id, name.last_name, address.street_address
FROM `name`
JOIN `address` ON name.name_id = address.name_id
WHERE name.name_id IN (
  SELECT GROUP_CONCAT(name.name_id)
  FROM `name`
  GROUP BY `last_name`
  HAVING count(*) > 1
)
ORDER BY `last_name`
于 2009-10-22T00:39:27.340 回答
0
SELECT name.name_id, name.last_name, address.street_address, count(name.last_name) as last_name_count
FROM `name`
JOIN `address` ON name.name_id = address.name_id
HAVING last_name_count > 1
于 2009-10-22T00:29:34.817 回答