Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ndias

Distinct com left join

Recommended Posts

Tenho um SELECT que faz uma consulta no banco com left join e por conta disso traz registros repetidos.

 

SELECT campo FROM tabela1 t1 LEFT JOIN tabela2 t2 ON t1.id = t2.id WHERE campo = 'valor'

 

Resultado:

id1

id2

id3

id4

id1

id3

 

Se na tabela2 tiver mais de um registro com id igual da tabela1, ele vai duplicar, enquanto na verdade eu gostaria que mostrasse um só

 

Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma solução

SELECT distinct campo FROM tabela1 t1 LEFT JOIN tabela2 t2 ON t1.id = t2.id WHERE campo = 'valor'

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 
select distinct a.campo  from
(
SELECT campo FROM tabela1 t1 LEFT JOIN tabela2 t2 ON t1.id = t2.id WHERE campo = 'valor' ) a
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso até funcionaria A.Jr, se eu não precisasse chamar o campo da tabela que estou fazendo o left join

 

Antes do left eu faço um inner join para unir uma terceira tabela que é aonde está o id usado no left join

 

o problema é que eu ligo a tabela 1 com a 2 através de um id de empresa, e a mesma empresa pode ter mais de uma vaga e um único ou nenhum registro na tabela 2

 

então, o resultado mostra assim, por ex, se tiver duas vagas e um registro:

 

empresa, vaga1, registro

empresa, vaga2, registro repetido

 

se tiver uma vaga e nenhum registro, ou uma vaga e um registro, funciona.

 

resolveria o problema se desse para eu ligar a tabela 2 com o registro da vaga, mas infelizmente não dá

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT v.IdCadVaga, e.IDEmpresa, v.Empresa, v.QtdVagas, v.Liberado, v.DataCadastro, v.DataUpdate, c.ValorTotalAPagar, c.ValorPagoEmpresa, c.idCobrancaEmpresa

FROM tblCadastro_Vaga_Incompleto v

INNER JOIN tblEmpresa e ON e.CNPJ = v.CNPJ

LEFT JOIN tblCobrancaEmpresa c ON c.idEmpresa = e.idEmpresa

AND (

(MONTH(CONVERT(Date,v.DataCadastro,103)) <= MONTH(CONVERT(Date,c.DataCadastro,103))

AND YEAR(CONVERT(Date,v.DataCadastro,103)) = YEAR(CONVERT(Date,c.DataCadastro,103))

)

OR (

(MONTH(CONVERT(Date,v.DataUpdate,103)) = MONTH(CONVERT(Date,c.DataPagamentoEmpresa,103))

AND YEAR(CONVERT(Date,v.DataUpdate,103)) = YEAR(CONVERT(Date,c.DataPagamentoEmpresa,103))))

)

AND c.Status = 'PAGO'

AND c.TipoCobranca <> 'ADM + SEG'

AND c.TipoCobranca <> 'SEG'

WHERE v.Excluido = 'N'

AND (

(v.Liberado = 1

AND v.TipoServico IN (1,10,13)

AND CONVERT(DateTime,v.DataCadastro,103) <= GETDATE()-62

AND MONTH(CONVERT(Date,v.DataCadastro,103)) = 5

AND YEAR(CONVERT(Date,v.DataCadastro,103)) = 2015

)

OR

(v.Liberado NOT IN (0,1)

AND MONTH(CONVERT(Date,v.DataUpdate,103)) = 7

AND YEAR(CONVERT(Date,v.DataUpdate,103)) = 2015 )

)

ORDER BY v.IdCadVaga ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

SELECT MAX(v.IdCadVaga)as IdCadVaga, e.IDEmpresa, v.Empresa, v.QtdVagas, v.Liberado, v.DataCadastro, v.DataUpdate, c.ValorTotalAPagar, c.ValorPagoEmpresa, c.idCobrancaEmpresa
FROM tblCadastro_Vaga_Incompleto v
      INNER JOIN tblEmpresa e ON e.CNPJ = v.CNPJ
            LEFT JOIN tblCobrancaEmpresa c ON c.idEmpresa = e.idEmpresa
            AND (
                  (MONTH(CONVERT(Date,v.DataCadastro,103)) <= MONTH(CONVERT(Date,c.DataCadastro,103))
                  AND YEAR(CONVERT(Date,v.DataCadastro,103)) = YEAR(CONVERT(Date,c.DataCadastro,103))
                  )
                  OR (
                  (MONTH(CONVERT(Date,v.DataUpdate,103)) = MONTH(CONVERT(Date,c.DataPagamentoEmpresa,103))
                  AND YEAR(CONVERT(Date,v.DataUpdate,103)) = YEAR(CONVERT(Date,c.DataPagamentoEmpresa,103))))
                  )
            AND c.Status = 'PAGO'
            AND c.TipoCobranca <> 'ADM + SEG'
            AND c.TipoCobranca <> 'SEG'
WHERE v.Excluido = 'N'
AND (
      (v.Liberado = 1
      AND v.TipoServico IN (1,10,13)
      AND CONVERT(DateTime,v.DataCadastro,103) <= GETDATE()-62
      AND MONTH(CONVERT(Date,v.DataCadastro,103)) = 5
      AND YEAR(CONVERT(Date,v.DataCadastro,103)) = 2015
      )
      OR
      (v.Liberado NOT IN (0,1)
      AND MONTH(CONVERT(Date,v.DataUpdate,103)) = 7
      AND YEAR(CONVERT(Date,v.DataUpdate,103)) = 2015 )
      )
GROUP BY  e.IDEmpresa, v.Empresa, v.QtdVagas, v.Liberado, v.DataCadastro, v.DataUpdate, c.ValorTotalAPagar, c.ValorPagoEmpresa, c.idCobrancaEmpresa
ORDER BY v.IdCadVaga ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.