SQL , INSERT TABELA1 COM SELECT NA TABELA2 E TABELA3
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.
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
Curtidas 0
Melhor post
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.
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
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:
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
12/06/2019
Renato, Daniel, bom dia.
Por enquanto obrigado pelo retorno, assim que puder testar informo.
Por enquanto obrigado pelo retorno, assim que puder testar informo.
GOSTEI 1