Een manier om uw resultaat te bereiken is het gebruik van geneste zoekopdracht en het hebben van clausule:Selecteer in de binnenste zoekopdracht die met meer dan één, en in de buitenste zoekopdracht selecteert u id:
Controleer het volgende voorbeeld voor selectiecriteria voor één kolom:
Tabel maken:
CREATE TABLE `person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first` varchar(120) NOT NULL,
`last` varchar(120) NOT NULL
);
Tupel invoegen:
INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );
Het resultaat dat je nodig hebt:
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)
[ANTWOORD]
Maar alsof je selectiecriteria gebaseerd zijn op meerdere kolommen dan kun je gebruik maken van JOIN.
Om het uit te leggen ben ik een selectiequery aan het schrijven die een tussentabel maakt die in JOIN als tweede operandtabel zal worden gebruikt.
Query is selecteer alle eerste naam en kolom die duplicaten met enkele van andere rijen:
Selecteer bijvoorbeeld rijen waarin first
en last
naam herhaalt
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)
Je hebt dus maar één paar first
en last
benoemt die herhalingen (of is duplicaten met enkele andere rijen).
Nu is de vraag:hoe selecteer je id
van deze rij? Gebruik Deelnemen! als volgt:
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)
u kunt op basis van zoveel kolommen selecteren als u wilt b.v. enkele kolom als u join wilt gebruiken, verwijder dan de achternaam.