Sabe-se que ao utilizar um LEFT JOIN, todos os registros da tabela à esquerda são exibidos independente de existir correspondência na tabela à direita.
Mas eu tenho uma situação a qual eu não quero que sejam exibidos TODOS os registros da esquerda.
Existe um campo de DATA na minha tabela da esquerda, e eu quero que sejam considerados apenas os registros de um determinado intervalo de data.
No meu SELECT abaixo, estou tentando fazer uma consulta pegando apenas os registros da tabela à esquerda (SE5050 as E) com data (E5_DATA) entre 01 e 31 de janeiro, para que apareçam correspondência ou não destes registros na tabela à direita (CV3050 as CV). Mas do jeito que está, o SELECT está pegando TODOS os registros da esquerda, não respeitando meu filtro de data (que eu coloquei em vermelho). Como resolvo isso? Não se preocupem com os formatos dos campos, a data no meu BD é assim mesmo e funciona normalmente em qualquer outra situação de select.
Pergunta
Guest Eduardo Coimbra
Bom dia! Tenho uma dúvida...
Sabe-se que ao utilizar um LEFT JOIN, todos os registros da tabela à esquerda são exibidos independente de existir correspondência na tabela à direita.
Mas eu tenho uma situação a qual eu não quero que sejam exibidos TODOS os registros da esquerda.
Existe um campo de DATA na minha tabela da esquerda, e eu quero que sejam considerados apenas os registros de um determinado intervalo de data.
No meu SELECT abaixo, estou tentando fazer uma consulta pegando apenas os registros da tabela à esquerda (SE5050 as E) com data (E5_DATA) entre 01 e 31 de janeiro, para que apareçam correspondência ou não destes registros na tabela à direita (CV3050 as CV). Mas do jeito que está, o SELECT está pegando TODOS os registros da esquerda, não respeitando meu filtro de data (que eu coloquei em vermelho). Como resolvo isso? Não se preocupem com os formatos dos campos, a data no meu BD é assim mesmo e funciona normalmente em qualquer outra situação de select.
SELECT
E.E5_NUMERO,E.E5_LA,E.E5_DATA,E.E5_TIPO,E.E5_PREFIXO,E.E5_PARCELA,E.E5_CLIFOR,E.E5_BENEF,
CONVERT(NUMERIC(15,2),ROUND(E.E5_VALOR,2)) AS E5_VALOR,E.E5_DOCUMEN,E.E5_RECPAG,E.E5_BENEF,E.E5_HISTOR,E.E5_TIPODOC,
C.CT2_DATA,C.CT2_LOTE,C.CT2_SBLOTE,C.CT2_DOC,C.CT2_LINHA,C.CT2_DC,C.CT2_DEBITO,C.CT2_CREDIT,
CONVERT(NUMERIC(15,2),ROUND(C.CT2_VALOR,2)),C.CT2_HIST,C.CT2_ORIGEM
FROM SE5050 AS E
LEFT JOIN CV3050 AS CV ON
E.E5_DATA >= '20080101' AND E.E5_DATA <= '20080131' AND E.E5_FILIAL = '01' AND E.D_E_L_E_T_ <> '*'
AND E.E5_DATA = CV.CV3_DTSEQ AND CV.CV3_FILIAL = '01' AND CV.CV3_TABORI = 'SE5' AND
CV.CV3_RECORI = E.R_E_C_N_O_ AND
CV.D_E_L_E_T_ <> '*' LEFT JOIN CT2050 AS C ON
C.CT2_FILIAL = '01' AND C.R_E_C_N_O_ = CV.CV3_RECDES AND C.D_E_L_E_T_ <> '*' ORDER BY E.E5_DATA,E.E5_NUMERO,C.CT2_DOC,C.CT2_LINHA ASC
Desde já agradeço!
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.