En måde at opnå dit resultat på er at bruge indlejret forespørgsel og have-klausul:I indre forespørgsel skal du vælge dem, der tæller mere end én, og i den ydre forespørgsel skal du vælge id:
Tjek følgende eksempel for udvælgelseskriterier for enkelt kolonne:
Opret tabel:
CREATE TABLE `person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first` varchar(120) NOT NULL,
`last` varchar(120) NOT NULL
);
Indsæt tupel:
INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );
Resultatet du skal bruge:
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)
[SVAR]
Men som om dine udvælgelseskriterier er baseret på mere end én kolonne, så kan du gøre brug af JOIN.
For at forklare det skriver jeg en udvælgelsesforespørgsel, der opretter en mellemtabel, der vil blive brugt i JOIN som anden operandtabel.
Forespørgslen er at vælge alle første navne og kolonner for disse dubletter med nogle af andre rækker:
Vælg f.eks. rækker, hvor first
og last
navnet gentager sig
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)
Så du har kun ét par first
og last
navngiver disse gentagelser (eller er dubletter med nogle andre rækker).
Nu er spørgsmålet:hvordan vælger man id
af denne række? Brug Deltag! som følger:
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)
du kan vælge ud fra så mange kolonner du vil f.eks. enkelt kolonne, hvis du vil bruge join, så fjern efternavn.