Vous avez une table avec 4 colonnes: p>
clé primaire / nom / nom de famille / prénom p>
Comment écrire une requête SQL pour trouver des personnes qui ont le même nom de famille? P>
1 / Ivan / Ivanov / Ivanovich P>
2 / Petr / Levinsky / Aleksandrovich P>
3 / Alex / Ivanov / Albertovich P>
devrait retourner Ivan et Alex P>
merci p>
5 Réponses :
Vous souhaitez regrouper par le nom de famille, puis utiliser une clause ayant pour trouver des groupes qui ont> 1.
non testé: p>
Cela ne fait pas ce que l'OP demande (renvoyer les prénoms).
@aix - sérieusement? Je suppose que si c'est une question d'entrevue, il saura un peu sur SQL et être capable de participer aux résultats de la requête ci-dessus.
dans standard SQL, vous pouvez simplement rejoindre la table avec lui-même: où Ceci renvoie toutes les paires distinctes de prénoms pour chaque nom de famille qui a plusieurs entrées qui ont plusieurs entrées. p> Vous voudrez peut-être ajouter t code> est votre table et ID code> est le principal Colonne de clé. p> nom de famille code> à la liste de colonnes sélectionnées. p> p>
Pourquoi a-t-on a.id
select surname,group_concat(firstname) from people group by surname having count(firstname)> 1;
Quant à moi le moyen le plus simple consiste à grouper des enregistrements par nom de famille, puis sélectionnez ceux qui comptent plus de 1. p>
Si vous souhaitez trouver exactement les noms, vous devez d'abord trouver tous les noms de famille qui apparaissent plus d'une fois et la recherche de tous les noms:
select name from t where surname in (select surname from t group by surname having count(surname) > 1);