Boa tarde!
Preciso fazer uma consulta que me retorne registros de tr~es tabelas, que se relacionam entre si, porém, quando uma delas não tem informação (é null), não retorna o dado, mesmo existindo nas outras duas, como ajusto isto?
Tabela 1
codigo nome
tabela 2
codigo ocorrencia
tabela 3
codigo horas trabalhadas
Quiando o funcionário não tem ocorrencia, ele não retorna as horas trabalhadas, como acerto este relacionamento para trazer mesmo quando for nul?
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- Relacionamentos e consult...
Coloca o código sql utilizado e faremos os devidos ajustes
Posta o código da tua consulta SQL.
Samsung RV415
Linux User #551823
Olá,
Você pode usar LEFT JOIN pra resolver isso.
Veja esse link:
http://www.devmedia.com.br/clausulas-inner-join-left-join-e-right-join-associacao-de-tabelas-sql-server-2008-parte-2/18930
Segue a consulta, acontece que tenho casos em que só existem informações na AAFHTFUN, porém, como a amovfun é nula, não retorna:
SELECTP.CHAPA,PFUNC.NOME,PFUNCAO.NOME'FUNCAO',
(SELECTSUM((R.HTRAB))
FROM
AAFHTFUN
WHERE
R.CHAPA=P.CHAPA AND
R.DATABETWEEN'2015-01-21'AND'2015-02-21')'HORAS TRABALHADAS',
CODEVE_CODEVE1=MAX(CASEWHENP.CODEVE='0449'THEN (P.NUMHORAS)END),
CODEVE_CODEVE2=MAX(CASEWHENP.CODEVE='0608'THEN (P.NUMHORAS)END),
CODEVE_CODEVE3=MAX(CASEWHENP.CODEVE='0451'THEN (P.NUMHORAS)END),
CODEVE_CODEVE4=MAX(CASEWHENP.CODEVE='9192'THEN (P.NUMHORAS)END),
CODEVE_CODEVE5=MAX(CASEWHENP.CODEVE='9185'THEN (P.NUMHORAS)END),
CODEVE_CODEVE6=MAX(CASEWHENP.CODEVE='0222'THEN (P.NUMHORAS)END),
CODEVE_CODEVE7=MAX(CASEWHENP.CODEVE='0221'THEN (P.NUMHORAS)END),
PFUNC.CODCOLIGADA,
PFUNC.CODSECAO
FROM
PFUNC
LEFT JOIN AMOVFUN AS P (NOLOCK) ON PFUNC.CHAPA=P.CHAPAANDPFUNC.CODCOLIGADA=P.CODCOLIGADA
LEFT JOIN PFUNCAO (NOLOCK)ON PFUNCAO.CODCOLIGADA=PFUNC.CODCOLIGADA ANDPFUNCAO.CODIGO=PFUNC.CODFUNCAO
LEFT JOIN PSECAO (NOLOCK)ONPFUNC.CODCOLIGADA=PSECAO.CODCOLIGADA
LEFT JOIN PEVENTO (NOLOCK)ON PEVENTO.CODIGO=P.CODEVEANDPEVENTO.CODCOLIGADA=P.CODCOLIGADA
WHERE
PFUNC.CODSECAOLIKE'%0172%' AND
P.INICIOPER>='2015-01-21' AND
P.FIMPER<='2015-02-21'
GROUP BY
P.CHAPA,PFUNC.NOME,PFUNCAO.NOME,PFUNC.CODCOLIGADA,PFUNC.CODSECAO
ORDER BY PFUNC.NOME
Cara coloca seu código entre as tags code como fala nesse tópico, isso ajuda a gente a te ajudar.
A tag code=SQL colore o código.
Ai , pessoal, li o artigo que o Newuser100, recomendou e encontrei a solução, mantive o left join, porém retirei ua condição do where que limitava a tabela amovfun, como o join mantém a condição da outra cláusula, deu certo. valeu, este fórum ajuda bastante, caso encontrem outra forma, me avisem
Se deu certo, coloque um Resolvido no título do seu tópico, assim o pessoal não fica boiando já que os tópicos do fórum não são fechados.
atirm82 disse: Ai , pessoal, li o artigo que o Newuser100, recomendou e encontrei a solução, mantive o left join, porém retirei ua condição do where que limitava a tabela amovfun, como o join mantém a condição da outra cláusula, deu certo. valeu, este fórum ajuda bastante, caso encontrem outra forma, me avisem
É o TOTVS/RM Labore não é ?!
Dependendo dos JOINS até a sequência das tabelas pode influenciar na exibição ou omissão de campos também