Fórum Diferenças left join. #52432
24/08/2005
0
Alguém pode me explicar a diferença de
left join
e left outer join.
Outra coisa, p full join pega todos os registros ?
um pequeno exemplo:
select EQUIPAMENTOS.CODEQUIPAMENTO, EQUIPAMENTOS.NOME, EQUIPAMENTOS.VOLTS, EQUIPAMENTOS.VALORUNITARIO, EQUIPAMENTOS.IDMOTORDIESEL NOMEMOTORDIESEL, EQUIPAMENTOS.IDMOTORELETRICO NOMEMOTORELETRICO, EQUIPAMENTOS.IDCOMPRESSOR NOMECOMPRESSOR, EQUIPAMENTOS.IDCOMPRESSORACOPLADO NOMECOMPRESSORACOPLADO, GASES.NOME NOMEGAS from EQUIPAMENTOS left join MOTORES on EQUIPAMENTOS.IDMOTORDIESEL = MOTORES.IDMOTOR left join MOTORES on EQUIPAMENTOS.IDMOTORELETRICO = MOTORES.IDMOTOR inner join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSOR = COMPRESSORES.IDCOMPRESSOR left join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSORACOPLADO = COMPRESSORES.IDCOMPRESSOR inner join GASES on EQUIPAMENTOS.IDGAS = GASES.IDGAS
No caso o compressor é obrigatório.
O Resto nem sempre é obrigatório, entao usei o left join, mas gostaria de saber a diferença entre eles, e sobre o comando full.
Obrigado
Lynx
Curtir tópico
+ 0Posts
24/08/2005
Lynx
select EQUIPAMENTOS.CODEQUIPAMENTO, EQUIPAMENTOS.NOME, EQUIPAMENTOS.VOLTS, EQUIPAMENTOS.VALORUNITARIO, EQUIPAMENTOS.IDMOTORDIESEL NOMEMOTORDIESEL, EQUIPAMENTOS.IDMOTORELETRICO NOMEMOTORELETRICO, EQUIPAMENTOS.IDCOMPRESSOR NOMECOMPRESSOR, EQUIPAMENTOS.IDCOMPRESSORACOPLADO NOMECOMPRESSORACOPLADO, COMPRESSORES.NOME, MOTORES.NOME, GASES.NOME NOMEGAS from EQUIPAMENTOS left outer join MOTORES on EQUIPAMENTOS.IDMOTORDIESEL = MOTORES.IDMOTOR left join MOTORES on EQUIPAMENTOS.IDMOTORELETRICO = MOTORES.IDMOTOR inner join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSOR = COMPRESSORES.IDCOMPRESSOR left join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSORACOPLADO = COMPRESSORES.IDCOMPRESSOR inner join GASES on EQUIPAMENTOS.IDGAS = GASES.IDGAS
Mas no caso ele está criando campos assim, NOME1,NOME2 e NOME3.
Não respeita os nomes que dei após o ID (NOMEMOTORELETRICO etc.. etc..)
Gostei + 0
24/08/2005
Sandra
Veja este tópico: http://forum.clubedelphi.net/viewtopic.php?t=49308&highlight=left
Gostei + 0
24/08/2005
Lynx
Mas tem como os campos do resultado ter outro nome.
No caso ele faz o left Join com a tabela compressores,
e o nome do campo é nome.
Como tem 2 compressores o resultado será NOME1 e NOME2.
Nesse caso tem como alterar o nome do campo , do resultado.
Para meu grid ficar mais organizado.
Obrigado
Gostei + 0
24/08/2005
Lynx
Gostei + 0
24/08/2005
Lynx
Gostei + 0
24/08/2005
Lynx
Por exemplo quero selecionar todos os equipaments, os motores etc.
Mas no cado o equipamento não vai ter motor elétrico.
vai fica NULL este campo.
mas no meu join terá isso.
EQUIPAMENTOS.IDMOTORELETRICO = MOTORES.IDMOTOR
e vai voltar NULL!!
só que eu n posso tirar isso, pq existe equipamentos com motor elétrico e diesel .
Gostei + 0
24/08/2005
Emerson Nascimento
select EQUIP.CODEQUIPAMENTO, EQUIP.NOME, EQUIP.VOLTS, EQUIP.VALORUNITARIO, EQUIP.IDMOTORDIESEL, EQUIP.IDMOTORELETRICO, EQUIP.IDCOMPRESSOR, EQUIP.IDCOMPRESSORACOPLADO, COMP.NOME NomeCompressor, COMPA.NOME NomeCompressorAcoplado, MOTDIE.NOME NomeMotorDiesel, MOTELE.NOME NomeMotorEletrico, GASES.NOME NomeGas from EQUIPAMENTOS EQUIP left join MOTORES MOTDIE on (MOTDIE.IDMOTOR=EQUIP.IDMOTORDIESEL) left join MOTORES MOTELE on (MOTELE.IDMOTOR=EQUIP.IDMOTORELETRICO) inner join COMPRESSORES COMP on (COMP.IDCOMPRESSOR=EQUIP.IDCOMPRESSOR) left join COMPRESSORES COMPA on (COMPA.IDCOMPRESSOR=EQUIP.IDCOMPRESSORACOPLADO) inner join GASES on (GASES.IDGAS=EQUIP.IDGAS)
Gostei + 0
24/08/2005
Lynx
Tem Equipamentos que não tem motor.
E Compressores 1 vai ter, mas o Acoplado pode ser NULL.
Só que não funciona de maneira alguma esse select.
Só retorna 2 NOMES, e um de baixo do outro...
Queria retornar certo em uma linha, tudo.
(Se não tiver um motor, e tiver o outro então deveria mostrar no grid um tipo de motor , e o outro em branco).
Mas não vai...
select EQUIPAMENTOS.CODEQUIPAMENTO, EQUIPAMENTOS.NOME, EQUIPAMENTOS.VOLTS, EQUIPAMENTOS.VALORUNITARIO, EQUIPAMENTOS.IDMOTORDIESEL, EQUIPAMENTOS.IDMOTORELETRICO, EQUIPAMENTOS.IDCOMPRESSOR, EQUIPAMENTOS.IDCOMPRESSORACOPLADO, COMPRESSORES.NOME, MOTORES.NOME, GASES.NOME NOMEGAS from EQUIPAMENTOS left join MOTORES on EQUIPAMENTOS.IDMOTORDIESEL = MOTORES.IDMOTOR left join MOTORES on EQUIPAMENTOS.IDMOTORELETRICO = MOTORES.IDMOTOR left join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSOR = COMPRESSORES.IDCOMPRESSOR left join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSORACOPLADO = COMPRESSORES.IDCOMPRESSOR inner join GASES on EQUIPAMENTOS.IDGAS = GASES.IDGAS
:roll:
:?:
Obrigado
Gostei + 0
24/08/2005
Lynx
Tinha tentado tudo left, (Desespero).
Sua maneira funcionou!
Vou analizar muito obrigado
Gostei + 0
24/08/2005
Lynx
select EQUIPAMENTOS.CODEQUIPAMENTO, EQUIPAMENTOS.NOME, EQUIPAMENTOS.VOLTS, EQUIPAMENTOS.VALORUNITARIO, EQUIPAMENTOS.IDMOTORDIESEL NOMEMOTORDIESEL, EQUIPAMENTOS.IDMOTORELETRICO NOMEMOTORELETRICO, EQUIPAMENTOS.IDCOMPRESSOR NOMECOMPRESSOR, EQUIPAMENTOS.IDCOMPRESSORACOPLADO NOMECOMPRESSORACOPLADO, COMPRESSORES.NOME, MOTORES.NOME, GASES.NOME NOMEGAS from EQUIPAMENTOS left join MOTORES on EQUIPAMENTOS.IDMOTORDIESEL = MOTORES.IDMOTOR left join MOTORES on EQUIPAMENTOS.IDMOTORELETRICO = MOTORES.IDMOTOR inner join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSOR = COMPRESSORES.IDCOMPRESSOR left join COMPRESSORES on EQUIPAMENTOS.IDCOMPRESSORACOPLADO = COMPRESSORES.IDCOMPRESSOR inner join GASES on EQUIPAMENTOS.IDGAS = GASES.IDGAS
Porque eu não colocava nome para o campo...
Eu já estava apelando pra tudo :wink:
Valeu!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)