Unir tabela Sql
04/04/2016
0
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
Posts
04/04/2016
Natanael Ferreira
[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
05/04/2016
Dirceu Morais
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
05/04/2016
Marcos P
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;
08/04/2016
Huidemar Costa
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
Clique aqui para fazer login e interagir na Comunidade :)