Unir tabela Sql
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:
Mas não atende minha expectativa quando existe somente em uma das tabelas
* Estou usando Firebird
Brigadú
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
Curtidas 2
Respostas
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
[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
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:
Na Tabela 2 tenho:
Quando "Unir as duas tabela" queria que saísse assim:
Usando o "Union" e/ou "Union All"
O Resultado sai assim:
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
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
04/04/2016
A minha sugestão é:
se você preferir no lugar do 'coalesce' pode usar o 'iif'
OBS.: Talvez o meu 'distinct' esteja sobrando.
Fiz o código utilizando o Firebird
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