MySQL-名前が複数回出現する名前とアドレスの行を名前別にグループ化して表示する

StackOverflow https://stackoverflow.com/questions/1604367

  •  05-07-2019
  •  | 
  •  

質問

" name"という2つのテーブルがあります。および「住所」。テーブル" name"のすべての last_name last_name と結合された address.street_address をリストしたいと思います。テーブル" name"で複数回発生します。

2つのテーブルは" 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"がテーブル「名前」に1回だけ表示され、次に「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

ただし、これにより姓ごとに1行のみが生成されます。リストされているすべての姓が欲しい。シンプルなものが欠けていることは知っています。助けてくれてありがとう、ありがとう!

役に立ちましたか?

解決

使用:

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

他のヒント

次のようにサブクエリを使用するか、同じアイデアを使用して派生テーブルに結合することもできます。

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`
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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top