Unir tabela Sql

04/04/2016

0

Tenho 2 tabelas

Tabela1
Cracha, Nome, data, Hora01, Hora02


Tabela2
Cracha, Nome, data, Hora01, Hora02


Preciso de um sql que me mostre:
Cracha, Nome, data, t1.Hora01 as hora_entrada_T1, t2.Hora02 as hora_saida_t1, t2.Hora1 as Hora_EntradaT2, t2.Hora2 as Hora_SaidaT2


Detalhe:
O Mesmo Cracha pode estar nas tabela1 e tabela2, ou somente na tabela1, ou somente na tabela2.


Tentei assim:
Select  t1.Cracha, t1.Nome, t1.data, t1.Hora01 as hora_entrada_T1, t2.Hora02 as hora_saida_t1, t2.Hora1 as Hora_EntradaT2, t2.Hora2 as Hora_SaidaT2
From Tabela1 t1, Tabela2 T2
Where t1.Cracha = T2.Cracha

Mas não atende minha expectativa quando existe somente em uma das tabelas



* Estou usando Firebird


Brigadú
Dirceu Morais

Dirceu Morais

Responder

Posts

04/04/2016

Natanael Ferreira

Experimente utilizar [b]Union[/b] ou [b]Union All[/b] no seu select para ver se te atende.

[b]Union[/b]: Remove repetidos entre as tabelas (equivalente ao Select Distinct);

[b]Union All[/b]: Todos os registros inclusive repetidos.

Veja este link:
http://www.linhadecodigo.com.br/artigo/945/sql-utilizando-o-operador-union-e-union-all.aspx
Responder

05/04/2016

Dirceu Morais

Valeu,

mas ainda não é o que estou procurando.

Quero que meu resultado mostre os dados das duas tabelas conforme abaixo

Ex:
Na tabela 1 tenho:
Cracha:  Nome: Data               Hora01:   Hora02: 
09           Jose    01/09/2015    08:00     12:00
09           Jose    02/09/2015    08:00     12:00
09           Jose    03/09/2015    08:00     12:00


Na Tabela 2 tenho:
Cracha:  Nome: Data               Hora01:   Hora02: 
09           Jose    01/09/2015    08:10     12:00
09           Jose    02/09/2015    08:00     12:00
09           Jose    04/09/2015    08:00     12:00



Quando "Unir as duas tabela" queria que saísse assim:
Cracha   Nome   Data              t1.Hora01   t1.Hora02       t2.Hora01   t2.Hora02     
09          Jose      01/09/2015       08:00       12:00               08:10           12:00
09          Jose      02/09/2015       08:00       12:00               08:00           12:00
09          Jose      03/09/2015       08:00       12:00               00:00           00:00 
09          Jose      04/09/2015       00:00       00:00               08:00           12:00


Usando o "Union" e/ou "Union All"
select t1.cracha, t1.nome, t1.data, t1.hora01, t1.hora02
from Tabela1 t1
Union
select t2.cracha, t2.nome, t2.data, t2.hora01, t2.hora02
from Tabela2 T2
Order by 1, 2, 3


O Resultado sai assim:
Cracha   Nome   Data              t1.Hora01   t1.Hora02          
09          Jose      01/09/2015       08:00       12:00               
09          Jose      01/09/2015       08:10       12:00               
09          Jose      02/09/2015       08:00       12:00               
09          Jose      02/09/2015       08:00       12:00 
09          Jose      03/09/2015       08:00       12:00               
09          Jose      04/09/2015       08:00       12:00               
Responder

05/04/2016

Marcos P

Tenta assim...

create temporay table tempTable
 select t1.cracha, t1.nome, t1.data, t1.hora01, t1.hora02
 from Tabela1 t1
 Union
 select t2.cracha, t2.nome, t2.data, t2.hora01, t2.hora02
 from Tabela2 T2
 Order by 1, 2, 3;

select distinct select cracha, nome, data, hora01, hora02
from tempTable;
Responder

08/04/2016

Huidemar Costa

A minha sugestão é:
select distinct
coalesce(t1.cracha, t2.cracha) cracha,
coalesce(t1.nome, t2.nome) nome,
coalesce(t1.data,t2.data) data,
t1.hora01,
t1.hora02,
t2.hora01,
t2.hora02
from Tabela1 t1  full join tabela2  t2  using(cracha, data)


se você preferir no lugar do 'coalesce' pode usar o 'iif'

select distinct
iif(t1.cracha is not null,t1.cracha, t2.cracha ) cracha,
iif(t1.nome is not null,t1.nome, t2.nome) nome,
iif(t1.data is not null,t1.data, t2.data) data,
t1.hora01,
t1.hora02,
t2.hora01,
t2.hora02
from Tabela1 t1  full join tabela2  t2  using(cracha, data)



OBS.: Talvez o meu 'distinct' esteja sobrando.
Fiz o código utilizando o Firebird
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar