Fórum Diferenças left join. #52432

24/08/2005

0

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

Responder

Posts

24/08/2005

Lynx

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..)


Responder

Gostei + 0

24/08/2005

Sandra

lynx,

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


Responder

Gostei + 0

24/08/2005

Lynx

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


Responder

Gostei + 0

24/08/2005

Lynx

está errado meu select


Responder

Gostei + 0

24/08/2005

Lynx

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....


Responder

Gostei + 0

24/08/2005

Lynx

é 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 .


Responder

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)



Responder

Gostei + 0

24/08/2005

Lynx

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


Responder

Gostei + 0

24/08/2005

Lynx

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

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

Vou analizar muito obrigado


Responder

Gostei + 0

24/08/2005

Lynx

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!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar