Unir tabela Sql

MySQL

Delphi

Firebird

04/04/2016

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

Curtidas 2

Respostas

Natanael Ferreira

Natanael Ferreira

04/04/2016

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
GOSTEI 0
Dirceu Morais

Dirceu Morais

04/04/2016

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               
GOSTEI 0
Marcos P

Marcos P

04/04/2016

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;
GOSTEI 0
Huidemar Costa

Huidemar Costa

04/04/2016

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
GOSTEI 0
POSTAR