SQL , INSERT TABELA1 COM SELECT NA TABELA2 E TABELA3

SQL

12/06/2019

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.
Flávio Lopes

Flávio Lopes

Curtidas 0

Melhor post

Renato Dias

Renato Dias

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.
GOSTEI 1

Mais Respostas

Daniel Araújo

Daniel Araújo

12/06/2019

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;
GOSTEI 1
Flávio Lopes

Flávio Lopes

12/06/2019

Renato, Daniel, bom dia.
Por enquanto obrigado pelo retorno, assim que puder testar informo.
GOSTEI 1
POSTAR