0

「名前」と「住所」の2つのテーブルがあります。テーブル「名前」で複数回出現する、テーブル「名前」内のすべてのlast_name結合をリストしたいと思います。address.street_addresslast_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" がテーブル "name" に 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 つの行のみを生成します。姓名をすべて記載してほしいです。私は単純なものが欠けていることを知っています。どんな助けでも大歓迎です、ありがとう!

4

3 に答える 3

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 に答える