Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Cómo puedo comprobar si hay duplicados antes de insertarlos

Estas en el tema de Cómo puedo comprobar si hay duplicados antes de insertarlos en el foro de SQL Server en Foros del Web. Buenas tardes a todos, Como puedo evitar que al pasar los datos de una tabla a otra (como muestro en el ejemplo) no se inserten ...
  #1 (permalink)  
Antiguo 10/05/2017, 12:38
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Cómo puedo comprobar si hay duplicados antes de insertarlos

Buenas tardes a todos,
Como puedo evitar que al pasar los datos de una tabla a otra (como muestro en el ejemplo) no se inserten datos repetidos.

Código PHP:
 CREATE TABLE #Aux
    
(
        
Id       INT IDENTITY(1,1)
       ,
Nombre   VARCHAR(50)
       ,
Apellido VARCHAR(50)
       ,
Dni      INT
    
)
    
    
INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
    
INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
    
INSERT INTO #Aux VALUES ('Gabriela', 'Romero', 73345);
    
INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
    
INSERT INTO #Aux VALUES ('Alejandro', 'Gonzales', 82315);
    
INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
        
    
CREATE TABLE #Aux1
    
(
        
Id       INT IDENTITY(1,1)
       ,
Nombre   VARCHAR(50)
       ,
Apellido VARCHAR(50)
       ,
Dni      INT
    
)
    
    
INSERT INTO #Aux1
           
SELECT Nombre
                 
,Apellido
                 
,Dni
           FROM 
#Aux
                      
    
SELECT FROM #Aux1 
En mi tabla original tengo más de 10000 registros y para eso necesito hacer algo así.

Espero que me puedan ayudar.

Saludos,
  #2 (permalink)  
Antiguo 10/05/2017, 13:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

seria con un simple left join:

Código SQL:
Ver original
  1. SELECT * FROM tabla1 AS t1
  2. LEFT JOIN tabla2 AS t2 ON (t1.id=t2.id)
  3. WHERE t2.id IS NULL

Ahi solo obtienes los registros que estan en tabla1 pero no en tabla2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 10/05/2017, 14:00
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Gracias por responder, pero no me funciona tal como lo planteas....intente con NOT EXISTS tampoco me funciona.
  #4 (permalink)  
Antiguo 10/05/2017, 14:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

un ejemplo de los datos a comparar para poder ayudarte mejor, y como estas usando el query?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/05/2017, 14:26
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Gracias, voy a poner la misma query
Código SQL:
Ver original
  1. CREATE TABLE #Aux
  2.     (
  3.         Id       INT IDENTITY(1,1)
  4.        ,Nombre   VARCHAR(50)
  5.        ,Apellido VARCHAR(50)
  6.        ,Dni      INT
  7.     )
  8.    
  9.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  10.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  11.     INSERT INTO #Aux VALUES ('Gabriela', 'Romero', 73345);
  12.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  13.     INSERT INTO #Aux VALUES ('Alejandro', 'Gonzales', 80315);
  14.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  15.        
  16.     CREATE TABLE #Aux1
  17.     (
  18.         Id       INT IDENTITY(1,1)
  19.        ,Nombre   VARCHAR(50)
  20.        ,Apellido VARCHAR(50)
  21.        ,Dni      INT
  22.     )
  23.    
  24.     INSERT INTO #Aux1
  25.            SELECT A.Nombre
  26.                  ,A.Apellido
  27.                  ,A.Dni
  28.            FROM #Aux A LEFT JOIN #Aux1 A1 ON A.Id = A1.Id
  29.            WHERE A1.Id IS NULL
  30.                    
  31.     SELECT * FROM #Aux1

En la tabla #Aux Juan Claros y Pedro Caceres estan insertado dos veces, necesito que una sola vez se inserte en la tabla #Aux1.
  #6 (permalink)  
Antiguo 10/05/2017, 14:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Sorry no vi bien lo que pedias, eso lo logras asi:

Código SQL:
Ver original
  1. CREATE TABLE #Aux
  2.     (
  3.         Id       INT IDENTITY(1,1)
  4.        ,Nombre   VARCHAR(50)
  5.        ,Apellido VARCHAR(50)
  6.        ,Dni      INT
  7.     )
  8.    
  9.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  10.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  11.     INSERT INTO #Aux VALUES ('Gabriela', 'Romero', 73345);
  12.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  13.     INSERT INTO #Aux VALUES ('Alejandro', 'Gonzales', 80315);
  14.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  15.        
  16.     CREATE TABLE #Aux1
  17.     (
  18.         Id       INT IDENTITY(1,1)
  19.        ,Nombre   VARCHAR(50)
  20.        ,Apellido VARCHAR(50)
  21.        ,Dni      INT
  22.     )
  23.  
  24.  
  25.     INSERT INTO #Aux1          
  26. SELECT nombre, apellido, dni FROM(         
  27.            SELECT A.Nombre
  28.                  ,A.Apellido
  29.                  ,A.Dni, ROW_NUMBER() OVER(partition BY nombre,apellido, dni ORDER BY nombre,apellido, dni) AS rn
  30.            FROM #Aux A
  31.   ) AS t1 WHERE rn=1
  32.  
  33.                    
  34.     SELECT * FROM #Aux1

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 10/05/2017, 18:13
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Gracias, ahora si, funciona perfecto.
Saludos!
  #8 (permalink)  
Antiguo 11/05/2017, 12:31
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Buenas tardes, disculpa, si en la tabla #Aux1 ya se insertó Pedro Caceres, al ejecutar la query vuelve a repetir este dato, cómo se puede solucionar esto.

Código SQL:
Ver original
  1. CREATE TABLE #Aux
  2.     (
  3.         Id       INT IDENTITY(1,1)
  4.        ,Nombre   VARCHAR(50)
  5.        ,Apellido VARCHAR(50)
  6.        ,Dni      INT
  7.     )
  8.    
  9.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  10.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  11.     INSERT INTO #Aux VALUES ('Gabriela', 'Romero', 73345);
  12.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  13.     INSERT INTO #Aux VALUES ('Alejandro', 'Gonzales', 80315);
  14.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  15.    
  16.        
  17.     CREATE TABLE #Aux1
  18.     (
  19.         Id       INT IDENTITY(1,1)
  20.        ,Nombre   VARCHAR(50)
  21.        ,Apellido VARCHAR(50)
  22.        ,Dni      INT
  23.     )
  24.  
  25.     /**/
  26.  
  27.     INSERT INTO #Aux1 VALUES ('Pedro', 'Caceres', 82315);
  28.  
  29.         /**/
  30.  
  31.     INSERT INTO #Aux1          
  32.            SELECT nombre
  33.                  ,apellido
  34.                  ,dni
  35.                  FROM(        
  36.                      SELECT A.Nombre
  37.                            ,A.Apellido
  38.                            ,A.Dni
  39.                            ,ROW_NUMBER() OVER(partition BY nombre
  40.                                                           ,apellido
  41.                                                           ,dni
  42.                                                           ORDER BY nombre, apellido, dni) AS rn
  43.                        FROM #Aux A
  44.               ) AS t1 WHERE rn=1
  45.      
  46.                    
  47.     SELECT * FROM #Aux1

Saludos,
  #9 (permalink)  
Antiguo 11/05/2017, 13:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Ahi ya son 2 casos diferentes, uno es para cuando los repetidos vienen en la 1er tabla y el segundo es cuando ya tienes datos en la segunda tabla, para eso podriamos hacer esto:

Código SQL:
Ver original
  1. CREATE TABLE #Aux
  2.     (
  3.         Id       INT IDENTITY(1,1)
  4.        ,Nombre   VARCHAR(50)
  5.        ,Apellido VARCHAR(50)
  6.        ,Dni      INT
  7.     )
  8.    
  9.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  10.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  11.     INSERT INTO #Aux VALUES ('Gabriela', 'Romero', 73345);
  12.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  13.     INSERT INTO #Aux VALUES ('Alejandro', 'Gonzales', 80315);
  14.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  15.        
  16.     CREATE TABLE #Aux1
  17.     (
  18.         Id       INT IDENTITY(1,1)
  19.        ,Nombre   VARCHAR(50)
  20.        ,Apellido VARCHAR(50)
  21.        ,Dni      INT
  22.     )
  23.  
  24.  
  25.     INSERT INTO #Aux1          
  26. SELECT nombre, apellido, dni FROM(         
  27.            SELECT A.Nombre
  28.                  ,A.Apellido
  29.                  ,A.Dni, ROW_NUMBER() OVER(partition BY a.nombre,a.apellido, a.dni ORDER BY a.nombre,a.apellido, a.dni) AS rn
  30.            FROM #Aux A
  31.            LEFT JOIN #aux1 AS B ON (a.nombre=b.nombre AND a.Apellido=b.Apellido AND a.Dni=b.Dni)
  32.            WHERE b.nombre IS NULL AND b.Apellido IS NULL AND b.dni IS NULL
  33.   ) AS t1 WHERE rn=1
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 11/05/2017, 13:41
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Gracias, funciona perfecto. Saludos!

Etiquetas: duplicados, registros, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:33.