Left join

3 respostas
kvnallen

Pessoal, estou fazendo uma query aqui e empaquei no LEFT Join,
o que eu sei é que, exibe os valores das tabelas q vc fez o left join, todos os da esquerda que possuirem valores e o da direita todos, até se for null.

Um pedaço do meu código, funcionando normal, só quero uma explicação:

SELECT CB.CBN_COD_CONTRATO AS NUMERO_CONTRATO,
       pf.psf_nome AS NOMEPF,
       PESSOASJURIDICAS.PSJ_RAZAO_SOCIAL AS RAZAO_SOCIAL,
       CB.CBN_DATA_CONTRATACAO AS DATA_CONTRATACAO,
       TELEFONEPESSOAS.TEP_NUMERO_TELEFONE AS NUMERO_TELEFONE,
       NL.NML_NOME || ' - ' || MUNICIPIOS.NUP_NOME || ' - ' ||
       MUNICIPIOS.NUP_CEP || ' - ' || BAIRROS.BRR_NOME || ' - ' ||
       EP.EPE_NUMERO || ' - ' || EP.EPE_TIPO_ENDERECO AS

  FROM INFOMED.INF_CONTRATOS_DE_BENEFICIARIO CB

 INNER JOIN INF_PESSOAS PESSOAS
    ON CB.CBN_PSS_COD_PESSOA = PESSOAS.PSS_COD_PESSOA

 LEFT JOIN INF_PESSOAS_FISICAS PF
    ON PF.PSF_PSS_COD_PESSOA = PESSOAS.PSS_COD_PESSOA

 LEFT JOIN INF_PESSOAS_JURIDICAS PESSOASJURIDICAS
    ON PESSOASJURIDICAS.PSJ_PSS_COD_PESSOA = PESSOAS.PSS_COD_PESSOA

 INNER JOIN INFOMED.INF_ENDERECOS_PESSOA EP
    ON EP.EPE_PSS_COD_PESSOA = pessoas.pss_cod_pessoa
Ele faz o LEFT JOIN
LEFT JOIN INF_PESSOAS_FISICAS PF
    ON PF.PSF_PSS_COD_PESSOA = PESSOAS.PSS_COD_PESSOA

 LEFT JOIN INF_PESSOAS_JURIDICAS PESSOASJURIDICAS
    ON PESSOASJURIDICAS.PSJ_PSS_COD_PESSOA = PESSOAS.PSS_COD_PESSOA

No caso PF.PSF_PSS_COD_PESSOA é a tabela da esquerda? se não, qual é a tabela da esquerda? se puderem dar exemplos agradeço também!

3 Respostas

Rodrigo_Sasaki

SELECT Pessoas.Sobrenome, Pessoas.Nome, Pedidos.NumeroPedido FROM Pessoas LEFT JOIN Pedidos ON Pessoas.IdPessoa = Pedidos.IdPessoa ORDER BY Pessoas.Sobrenome No caso acima, Pessoas é a tabela da esquerda.

Fonte: http://www.w3schools.com/sql/sql_join_left.asp

kvnallen

Li em um lugar que independente da ordem do

ON Pessoas.IdPessoa = Pedidos.IdPessoa

Não muda nada, se estivesse

ON Pedidos.IdPessoa = Pessoas.IdPessoa

Seria o mesmo…

E se fosse com 2 LEFT JOIN, como ficaria ?

G

pq o alias de INF_PESSOAS_FISICAS é PF
e de INF_PESSOAS_JURIDICAS não é PJ?

pra complicar? rsrs!

mas isso não vem ao caso.

mas o q ta havendo? não ta vindo os registros?

se vc fizer só assim:

SELECT 
...
...  
  FROM INFOMED.INF_CONTRATOS_DE_BENEFICIARIO CB  
  
INNER JOIN INF_PESSOAS PESSOAS  
    ON CB.CBN_PSS_COD_PESSOA = PESSOAS.PSS_COD_PESSOA

vem os registros q vc acha q deveriam vir?

e quem disse q o left join é q vem mesmo se o campo for null, qq join vem mesmo q o campo seja null.

porem o LEFT JOIN inclui os registros da tabela da esquerda q não tinha o correspondente na tabela da direita.
isso se não houver alguma condição referindo a esta tabela da direita fora do escopo do ON do left join.

Criado 6 de julho de 2012
Ultima resposta 6 de jul. de 2012
Respostas 3
Participantes 3