Registros duplicados

16/02/2008 - 20:28 por daniel | Informe spam
Hola, quisiera saber si alguien me puede explicar detalladamente como
funiona esta sentencia, que es para mostrar los datos duplicados de una
tabla incluyendo todos sus campos, pero no entiendo como funciona.

select * from productos where id_producto not in
(select min(id_producto) from productos as p where productos.nombre_producto
= p.nombre_producto)
order by id_producto

si alguien me puede ayudar gracias.
 

Leer las respuestas

#1 Alejandro Mesa
16/02/2008 - 21:57 | Informe spam
Hola Daniel,

Al parecer tienes productos con igual [nombre_producto] pero diferente
[id_producto],
por lo que la sentencia selecciona todo producto cuyo [id_producto] no es
igual al minimo [id_producto] de todos aquellos productos con igual nombre a
su nombre. No es necesario usar el operador IN en este caso, ya que la
funcion MIN trae una unica fila.

select *
from productos where id_producto >
(select min(id_producto) from productos as p where productos.nombre_producto
= p.nombre_producto)
order by id_producto

select
a.*
from
productos as a
inner join
(
select nombre_producto, min(id_producto) as min_id_producto
from productos
group by nombre_producto
) as b
on a.nombre_producto = b.nombre_producto
and a.id_producto > b.min_id_producto
order by
a.id_producto

Si usas SQL Server 2005, puedes usar una version mas leible y con mejor
rendimiento.

;with productos_cte
as
(
select
*,
row_number() over(partition by nombre_producto order by id_producto) as rn
from
dbo.productos
)
select *
from productos_cte
where rn > 1
order by rn
GO

AMB



"daniel" wrote:

Hola, quisiera saber si alguien me puede explicar detalladamente como
funiona esta sentencia, que es para mostrar los datos duplicados de una
tabla incluyendo todos sus campos, pero no entiendo como funciona.

select * from productos where id_producto not in
(select min(id_producto) from productos as p where productos.nombre_producto
= p.nombre_producto)
order by id_producto

si alguien me puede ayudar gracias.


Preguntas similares