SQL , INSERT TABELA1 COM SELECT NA TABELA2 E TABELA3

12/06/2019

16

SQL

Pessoal, bom dia.

Atualmente tenho uma query que faz insert na tabela1 com um select na tabela2 considerando a chave danfe no where, mas os dados da tabela2 depois de 3 meses são movidos para uma base espelhada na base da tabela 1 e 2. Como posso fazer algo do tipo, insert into tabela 1 from tabela2 quando não encontrado na tabela2 usar a tabela3. (Lembrando que a base da tabela3 é um histórico da base de dados da tabela1 e 2)

Estou quebrando a cabeça e não consegui estruturar algo simples.
Responder

Post mais votado

12/06/2019

Fala Flávio! Você pode usar UNION. Eu testei no sql server o script que vou mostrar abaixo, levando em conta que as três tabelas tem exatamente a mesma estrutura.

declare @nome varchar(50)

set @nome = 'Nascimento'

(select * from tabela2 where sobrenome = @nome) union (select * from tabela3 where sobrenome = @nome)

neste script eu declarei uma variável @nome do mesmo tipo do campo sobrenome varchar (50) na segunda linha atribui valor a esta variável e a utilizei na instrução UNION. É uma instrução com dois selects, em que será trazido de um ou de dois selects desde que a condição no where seja satisfeita.
Responder

Mais Posts

12/06/2019

Daniel Araújo

Boa noite Flávio!

A forma que o renato falou funciona. Se existir a possibilidade de o registro está tanto na tabela 2 quanto na 3, pode ser que cause um problema de duplicação.

Uma outra maneira, que evitaria esse risco, seria assim:
IF (SELECT COUNT(*) FROM TABELA_2 WHERE DANFE = '51080701212344000127550010000000981364117781') > 0
BEGIN
    INSERT INTO TABELA_1(CAMPO_1, CAMPO_2)
    SELECT CAMPO_1, CAMPO_2 FROM TABELA_2;
END
ELSE
BEGIN
    INSERT INTO TABELA_1(CAMPO_1, CAMPO_2)
    SELECT CAMPO_1, CAMPO_2 FROM TABELA_3;
END;
Responder

13/06/2019

Flávio Lopes

Renato, Daniel, bom dia.
Por enquanto obrigado pelo retorno, assim que puder testar informo.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira