Diferenças left join.

Firebird

24/08/2005

Bom Dia,
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

Lynx

Curtidas 0

Respostas

Lynx

Lynx

24/08/2005

ficou assim o select

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
Sandra

Sandra

24/08/2005

lynx,

Veja este tópico: http://forum.clubedelphi.net/viewtopic.php?t=49308&highlight=left


GOSTEI 0
Lynx

Lynx

24/08/2005

Obrigado Sandra, deu para saber bem a diferença, eu estou utilizando da forma certa com o left.

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
Lynx

Lynx

24/08/2005

está errado meu select


GOSTEI 0
Lynx

Lynx

24/08/2005

O Correto seria com INNER JOIN, mas no caso se um equipamento não ter motor elétrico e ter motor diesel dai vai voltar sem registro....


GOSTEI 0
Lynx

Lynx

24/08/2005

é possivel utilizar inner join, com um campo que será NULL.

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
Emerson Nascimento

Emerson Nascimento

24/08/2005

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
Lynx

Lynx

24/08/2005

No caso abaixo, motores podem ser null.
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
Lynx

Lynx

24/08/2005

Obrigado emerson.en, eu postei ao mesmo tempo que você...

Tinha tentado tudo left, (Desespero).
Sua maneira funcionou!

Vou analizar muito obrigado


GOSTEI 0
Lynx

Lynx

24/08/2005

ta explicado entao, esse código abaixo n funcionava
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
POSTAR