Uma maneira de obter seu resultado é usando a consulta aninhada e a cláusula havendo:Na consulta interna, selecione aqueles que contam mais de um e, na consulta externa, selecione o id:
Verifique o exemplo a seguir para critérios de seleção de coluna única:
Criar a tabela:
CREATE TABLE `person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first` varchar(120) NOT NULL,
`last` varchar(120) NOT NULL
);
Inserir tupla:
INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );
O resultado que você precisa:
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)
[RESPOSTA]
Mas como se seus critérios de seleção fossem baseados em mais de uma coluna, então você pode usar JOIN.
Para explicar estou escrevendo uma consulta de seleção que cria uma tabela intermediária que será usada no JOIN como segunda tabela de operandos.
A consulta é selecionar todos os primeiros nomes e colunas das duplicatas com algumas das outras linhas:
Por exemplo, selecione as linhas nas quais
first
e last
o nome se repete 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)
Então você tem apenas um par de
first
e last
nomeia essas repetições (ou é duplicado com algumas outras linhas). Agora, a questão é:como selecionar
id
desta fila? Use Junte-se! do seguinte modo: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)
você pode selecionar com base em quantas colunas desejar, por exemplo. coluna única, se você quiser usar join, remova o sobrenome.