none
SQL Server - Agregar informacion de una tabla a otra RRS feed

  • Pregunta

  • Buenas tardes a todos, tengo una pregunta ¿como hago para hacer una comparación entre dos tablas y que me devuelva los valores que coincidan y no afecte los valores que no coinciden o son duplicados?. Necesito que no me afecte la cantidad de registros de la primera tabla a la que pienso añadir campos de la segunda tabla.

    TABLA 1 TABLA 2
    Identificador CLASE EMPRESA ID_EMPRESA EMPRESA DIRECCION TELEFONO
    560475912 AUTOMOVIL UNIVERSAL AUTOMOTORA 560475912 UNIVERSAL AUTOMOTORA KR 71 No. 69 - 07 9965628
    530646937 AUTOMOVIL EXPRESO S.A. 530646937 EXPRESO S.A. CL 26 SUR No. 36 - 20 9734569
    560474825 AUTOMOVIL COOP. DE TRANSPORTES 560474825 COOP. DE TRANSPORTES KR 6 No. 39 - 20  
    461242398 AUTOMOVIL TRANS. S.A. 461242398 TRANS. S.A.   9151531
    530646937 AUTOMOVIL EXPRESO S.A.        
    461242398 AUTOMOVIL TRANS. S.A.        
    510775403 AUTOMOVIL NACIONAL S.A. 510775403 NACIONAL S.A. KR 79 D No. 55 - 40 SUR 9980750
    191114392 AUTOMOVIL SIDAUTO SA 191114392 SIDAUTO SA   9547991
    461251802 AUTOMOVIL KENNEDY LTDA 461251802 KENNEDY LTDA KR 13 No. 9 - 53 AP 202  
    461250466 AUTOMOVIL NACIONAL S.A. 461250466 NACIONAL S.A. CL 25 SUR N 9-71 9222222
    461250466 AUTOMOVIL NACIONAL S.A.        
    461250466 AUTOMOVIL NACIONAL S.A.        

    Las calves primarias son IDENTIFICADOR y ID_EMPRESA

    Lo que necesito es adicionar los campos DIRECCION y TELEFONO de la segunda tabla a la primera tabla, pero como se observa en la tabla 1 hay registros duplicados los cuales deben quedar como estan y no alterar la cantidad de la primera tabla.

    jueves, 17 de septiembre de 2020 18:18

Todas las respuestas

  • Podrías resolverlo con un MERGE:

    https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver15


    IIslas Master Consultant SQL Server

    jueves, 17 de septiembre de 2020 21:24
  • Un ejemplo por favor
    jueves, 17 de septiembre de 2020 21:40
  • Hola LEX_1020:

    Las calves primarias son IDENTIFICADOR y ID_EMPRESA

    Eso no es posible, al menos en tabla1 porque si así lo fueran no tendrían duplicados.

    Para resolver el problema, puedes hacer una update directamente.

    El escenario:

    Create table dbo.Tabla1 (
    identificador int,	clase varchar(20),	empresa	varchar(100));
    GO
    Insert into dbo.Tabla1(identificador, clase, empresa)
    VALUES
    (560475912,'AUTOMOVIL','UNIVERSAL AUTOMOTORA'),
    (530646937,'AUTOMOVIL','EXPRESO S.A.'),
    (560474825,'AUTOMOVIL','COOP. DE TRANSPORTES'),
    (461242398,'AUTOMOVIL','TRANS. S.A.'),
    (530646937,'AUTOMOVIL','EXPRESO S.A.'),	 	 	 	 
    (461242398,'AUTOMOVIL','TRANS. S.A.'),	 	 	 	 
    (510775403,'AUTOMOVIL','NACIONAL S.A.'),
    (191114392,'AUTOMOVIL','SIDAUTO SA'),
    (461251802,'AUTOMOVIL','KENNEDY LTDA'),
    (461250466,'AUTOMOVIL','NACIONAL S.A.'),
    (461250466,'AUTOMOVIL','NACIONAL S.A.'),	 	 	 	 
    (461250466,'AUTOMOVIL','NACIONAL S.A.');
    GO

    Con tabla1 creada, le añadimos las columnas que no tiene.

    Alter table dbo.Tabla1
    Add Direccion varchar(100), telefono varchar(20);
    GO

    Ahora creamos y poblamos de valores tabla2

    Create table dbo.Tabla2
    (
      identificador int
    , empresa		varchar(100)
    , direccion		varchar(100)
    , telefono		varchar(20)
    );
    GO
    Insert into dbo.Tabla2
    (identificador,  empresa, direccion, telefono)
    values
    (560475912,'UNIVERSAL AUTOMOTORA','KR 71 No. 69 - 07'		,'9965628'),
    (530646937,'EXPRESO S.A.'		 ,'CL 26 SUR No. 36 - 20'	,'9734569'),
    (560474825,'COOP. DE TRANSPORTES','KR 6 No. 39 - 20'		,''),	 
    (461242398,'TRANS. S.A.'		 ,''						,'9151531'),
    (510775403,'NACIONAL S.A.'		 ,'KR 79 D No. 55 - 40 SUR' ,'9980750'),
    (191114392,'SIDAUTO SA'			 ,''						,'9547991'),
    (461251802,'KENNEDY LTDA'		 ,'KR 13 No. 9 - 53 AP 202'	,''),
    (461250466,'NACIONAL S.A.'		 ,'CL 25 SUR N 9-71'		,'9222222');

    La solución pasa por hacer una update.

    Update t1 set direccion = t2.direccion
    			, telefono = t2.telefono
    		from dbo.Tabla1 t1 inner join dbo.Tabla2 t2 
    		on t1.identificador = t2.identificador and t1.empresa = t2.empresa;

    Tan solo tienes que igualar las partes coincidentes de tabla2 con tabla1 (las columnas identificadory empresa).

    SELECT Tabla1.identificador
    	 , Tabla1.clase
    	 , Tabla1.empresa
    	 , Tabla1.Direccion
    	 , Tabla1.telefono
    	   FROM dbo.Tabla1;


    viernes, 18 de septiembre de 2020 2:44