Un modo per ottenere il risultato è utilizzare la query nidificata e la clausola con:nella query interna seleziona quelli che ne contano più di uno e nella query esterna seleziona id:
Controllare il seguente esempio per i criteri di selezione di una singola colonna:
Crea tabella:
CREATE TABLE `person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first` varchar(120) NOT NULL,
`last` varchar(120) NOT NULL
);
Inserisci tupla:
INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );
Il risultato che ti serve:
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)
[RISPOSTA]
Ma come se i criteri di selezione si basassero su più colonne, puoi utilizzare JOIN.
Per spiegarlo sto scrivendo una query di selezione che crea una tabella intermedia che verrà utilizzata in JOIN come seconda tabella degli operandi.
La query è selezionare tutti i nomi e colonna quei duplicati con alcune delle altre righe:
Ad esempio selezionare le righe in cui first
e last
il nome si ripete
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)
Quindi hai solo un paio di first
e last
denomina quelle ripetizioni (o è duplicato con alcune altre righe).
Ora, la domanda è:come selezionare id
di questa riga? Usa Unisciti! come segue:
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)
puoi selezionare in base a quante colonne vuoi ad es. colonna singola se vuoi usare unisciti, quindi rimuovi il cognome.