Une façon d'obtenir votre résultat consiste à utiliser une requête imbriquée et une clause have :dans la requête interne, sélectionnez ceux qui en comptent plus d'un, et dans la requête externe, sélectionnez l'identifiant :
Vérifiez l'exemple suivant pour les critères de sélection de colonne unique :
Créer un tableau :
CREATE TABLE `person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first` varchar(120) NOT NULL,
`last` varchar(120) NOT NULL
);
Insérer un tuple :
INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );
Le résultat dont vous avez besoin :
mysql> SELECT `id`
-> FROM `person`
-> WHERE `first`=(SELECT `first` FROM `person` HAVING COUNT(`first`) > 1);
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.00 sec)
[RÉPONSE]
Mais comme si vos critères de sélection étaient basés sur plusieurs colonnes, vous pouvez utiliser JOIN.
Pour l'expliquer, j'écris une requête de sélection qui crée une table intermédiaire qui sera utilisée dans JOIN comme deuxième table d'opérandes.
La requête consiste à sélectionner tous les premiers noms et à mettre en colonne ces doublons avec d'autres lignes :
Par exemple, sélectionnez les lignes dans lesquelles first
et last
le nom se répète
mysql> SELECT `first`, `last`, count(*) as rows
-> FROM `person`
-> GROUP BY `first`, `last`
-> HAVING count(rows) > 1;
+-------+-----------+------+
| first | last | rows |
+-------+-----------+------+
| mukta | chourishi | 2 |
+-------+-----------+------+
1 row in set (0.00 sec)
Vous n'avez donc qu'une seule paire de first
et last
nomme ces répétitions (ou est en double avec d'autres lignes).
Maintenant, la question est :comment sélectionner id
de cette ligne ? Utilisez Rejoindre ! comme suit :
mysql> SELECT p1.`id`
-> FROM `person` as p1
-> INNER JOIN (
-> SELECT `first`, `last`, count(*) as rows
-> FROM `person`
-> GROUP BY `first`, `last`
-> HAVING count(rows) > 1) as p
-> WHERE p.`first` = p1.`first` and p.`last` = p1.`last`;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
2 rows in set (0.06 sec)
vous pouvez sélectionner sur la base d'autant de colonnes que vous le souhaitez, par ex. une seule colonne si vous souhaitez utiliser la jointure, puis supprimez le nom de famille.