Una forma de lograr su resultado es usar una consulta anidada y tener una cláusula:en la consulta interna, seleccione aquellos que cuentan más de uno, y en la consulta externa, seleccione id:
Consulte el siguiente ejemplo para los criterios de selección de una sola columna:
Crear tabla:
CREATE TABLE `person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first` varchar(120) NOT NULL,
`last` varchar(120) NOT NULL
);
Insertar tupla:
INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );
El resultado que necesitas:
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)
[RESPUESTA]
Pero como si su criterio de selección se basara en más de una columna, entonces puede usar JOIN.
Para explicarlo, estoy escribiendo una consulta de selección que crea una tabla intermedia que se usará en JOIN como segunda tabla de operandos.
La consulta es seleccionar todos los primeros nombres y columnas que se duplican con algunas de las otras filas:
Por ejemplo, seleccione las filas en las que first
y last
el nombre se repite
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)
Entonces solo tienes un par de first
y last
nombra esas repeticiones (o se duplica con algunas otras filas).
Ahora, la pregunta es:cómo seleccionar id
de esta fila? Usa ¡Únete! de la siguiente manera:
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)
puede seleccionar sobre la base de tantas columnas como desee, p. una sola columna si desea usar unirse, luego elimine el apellido.