Diferenças left join.
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:
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
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
Curtidas 0
Respostas
Lynx
24/08/2005
ficou assim o select
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..)
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
24/08/2005
lynx,
Veja este tópico: http://forum.clubedelphi.net/viewtopic.php?t=49308&highlight=left
Veja este tópico: http://forum.clubedelphi.net/viewtopic.php?t=49308&highlight=left
GOSTEI 0
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
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
24/08/2005
está errado meu select
GOSTEI 0
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
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 .
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
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
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...
:roll:
:?:
Obrigado
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
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
Tinha tentado tudo left, (Desespero).
Sua maneira funcionou!
Vou analizar muito obrigado
GOSTEI 0
Lynx
24/08/2005
ta explicado entao, esse código abaixo n funcionava
Porque eu não colocava nome para o campo...
Eu já estava apelando pra tudo :wink:
Valeu!
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