MySQL - affiche des lignes de noms et d'adresses groupées par nom, où le nom apparaît plusieurs fois

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

  •  05-07-2019
  •  | 
  •  

Question

J'ai deux tables, " nom " et "adresse". Je souhaite répertorier le nom_du_film et le code de l'adresse.adresse_du_trois de tous les nom_du_filtre de la table "nom". qui se produisent plus d'une fois dans la table "nom".

Les deux tables sont jointes dans la colonne "name_id".

La sortie désirée ressemblerait à ceci:

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 |

Notez que si le nom de famille "quot" est abernathy " n'apparaît qu'une fois dans la table "nom", puis "abernathy" ne doit pas être inclus dans le résultat.

C’est ce que j’ai trouvé jusqu’à présent:

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

Cependant, cela ne produit qu'une ligne par nom de famille. Je voudrais tous les noms de famille énumérés. Je sais que quelque chose de simple me manque. Toute aide est appréciée, merci!

Était-ce utile?

La solution

Utiliser:

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

Autres conseils

Vous pouvez utiliser une sous-requête comme ci-dessous ou utiliser la même idée pour rejoindre une table dérivée si vous préférez.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top