Ir para conteúdo

POWERED BY:

Arquivado

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

FabianoSouza

Tratar duplicidade (distinct não está funcionando).

Recommended Posts

Essa consulta trás alguns registros duplicados. A razão disso é porque peço para exibir o campo CompartilhamentoCod de uma tabela que está associada. Se não precisasse exibi-lo o Distinct funcionaria.

 

SELECT DISTINCT

EVENTOS.EventosTitulo , COMPARTILHAMENTO.CompartilhamentoCod,

FROM EVENTOS LEFT OUTER JOIN

COMPARTILHAMENTO ON EVENTOS.EventosCod = COMPARTILHAMENTO.CompartilhamentoCodItem

 

Dito o problema peço ajuda os colegas.

Preciso que o campo CompartilhamentoCod seja exibido. Mas sem que traga duplicidades.

 

Há uma forma de fazer isso? A cláusula Case pode ajudar nisso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este campo é chave? ou auto-incremento?

Não dá para usar um MAX para pegar o maximo valor deste campo? Pode ser uma saída.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá A. Jr.

O campo é auto-incremento e uso como PK . Tentei usar o MAX mas não funcionou.

 

SELECT MAX(CompartilhamentoCod),

EVENTOS.EventosTitulo , COMPARTILHAMENTO.CompartilhamentoCod

FROM EVENTOS LEFT OUTER JOIN

COMPARTILHAMENTO ON EVENTOS.EventosCod = COMPARTILHAMENTO.CompartilhamentoCodItem

Group by EVENTOS.EventosTitulo , COMPARTILHAMENTO.CompartilhamentoCod

 

Minha tab EVENTOS tem 17 registros. Mas a consulta trás 19 porque tem um Evento registrado duas vezes na tab Compartilhamento (o Evento está compartilhado para dois usuários).

 

Estou vendo se consigo resolver com ANY, ALL, IN...estou testando tudo hehe.

 

Acho que o certo para este caso seria subconsulta com OR. Vamos ver se consigo estruturar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Subquery...

Vai ter que fazer por subquery.

Tem como postar a estrutura da consulta? Monto rapidinho :devil:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estrutura? O que seria exatamente?

Um print serve?

 

sub.pngBom, caso afirmativo segue a tela.

 

Preciso listar todos os existentes em Eventos com a chave da tab Compartilhamento. Sem duplicidade.

Agradeço desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Evento está compartilhado para dois usuários

 

Colocando uma condição do tipo

 

 

... EVENTOS.USUARIO <> 'JOAO' ...

Não resolve ?

 

Limar a tabela em duplicidade ...

 

ou

 

 

SELECT MAX(CompartilhamentoCod),

EVENTOS.EventosTitulo , COMPARTILHAMENTO.CompartilhamentoCod
FROM (select distinct cod,eventos from eventos) EVENTOS LEFT OUTER JOIN

COMPARTILHAMENTO ON EVENTOS.EventosCod = COMPARTILHAMENTO.CompartilhamentoCodItem

Group by EVENTOS.EventosTitulo , COMPARTILHAMENTO.CompartilhamentoCod

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que assim funciona:

 

 SELECT DISTINCTev.EventosTitulo , cp.cod,FROM EVENTOS ev LEFT OUTER JOIN(select max(CompartilhamentoCod) as cod , CompartilhamentoCodItem  from COMPARTILHAMENTO group by CompartilhamentoCodItem) cp on cp.CompartilhamentoCodItem = ev.EventosCod 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz...essa foi na trave! Veja o print. Trouxe os itens sem duplicidade...mas não o campo

CompartilhamentoCod. É justamente deste cara que mais preciso. Dá um ligo.

 

quase.png

 

Onde você escreveu select max(CompartilhamentoCod) as cod tive que colocar select max(CompartilhamentoCod) as

CompartilhamentoCod porque não estava reconhecendo o campo (ficava sublinhado com aquelas cobrinhas vermelhas).

Compartilhar este post


Link para o post
Compartilhar em outros sites

E eu fiz meleca ao renomear. MAs agora foi. Gooooool!!!

 

gol.png

 

 

Meus amigos....muuuuuito obrigado!!! Hoje vou para aula mais leve ahaha.

 

Motta, pode fechar a conta...ops...marcar como resolvido heheh

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos, cá estou novamente...

 

Estou tentando criar uma consulta tomando como base a que o A.Jr criou para mim (post #8) e que funcionou.

O objetivo da consulta é mostrar a menor data existente da tab DATAS para cada evento existente na tab de EVENTOS.

 

SELECT DISTINCT

EVENTOS.EventosCod, EVENTOS.EventosTitulo, DATAS.DataInicio

FROM EVENTOS LEFT OUTER JOIN

(SELECT MIN(DatasDataInicio) AS DataInicio, DatasCodItem FROM DATAS GROUP BY DatasCodItem, DatasDataInicio) DATAS

ON DATAS.DatasCodItem = EVENTOS.EventosCod

 

A consulta trás duplicidades...preciso que isso não aconteça (esta consulta é apenas trecho da que realmente uso).

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O objetivo da consulta é mostrar a menor data existente da tab DATAS para cada evento existente na tab de EVENTOS.

 

Basicamente :

 

SELECT *
FROM EVENTOS E1
WHERE E1.DatasDataInicio  = (SELECT MIN(E2.DatasDataInicio)
                             FROM EVENTOS E2
                             WHERE E2.EventosCod = E1.EventosCod)

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT *

FROM DATAS D1

WHERE D1.DatasDataInicio = (SELECT MIN(D2.DatasDataInicio)

FROM DATAS D2

WHERE D2.EventosCod = D1.EventosCod)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora funcionou. Obrigado mesmo.

 

Agora preciso incorporar o trecho acima a esta consulta (que é a consulta que roda na página). Acho que esquecendo de algum parêntese....ou tem algum sobrando.

 

 

SELECT REPLICATE('0', 6 - LEN(EVENTOS.EventosCod)) AS RepeteN, EVENTOS.EventosCod,

EVENTOS.EventosTitulo, COMPARTILHAMENTO.CompartilhamentoCod,
FAVORITOS.FavoritosCod, EVENTOS.EventosDataCad, COMPARTILHAMENTO.CompartilhamentoCodItem, FAVORITOS.FavoritosCodRegistro
FROM EVENTOS
LEFT OUTER JOIN
(SELECT MAX(CompartilhamentoCodItem) AS CompartilhamentoCod, CompartilhamentoCodItem
FROM COMPARTILHAMENTO AS COMPARTILHAMENTO_1
GROUP BY CompartilhamentoCodItem) AS COMPARTILHAMENTO ON COMPARTILHAMENTO.CompartilhamentoCodItem = EVENTOS.EventosCod
LEFT OUTER JOIN
(SELECT MAX(FavoritosCodRegistro) AS FavoritosCod, FavoritosCodRegistro
FROM FAVORITOS AS FAVORITOS_1
GROUP BY FavoritosCodRegistro) AS FAVORITOS ON FAVORITOS.FavoritosCodRegistro = EVENTOS.EventosCod

 

 

Daqui pra baixo o SQL diz que há erro de sintaxe.

///Aqui é o trecho desta consulta do post #18. Adicionei o LEFT seguindo a lógica do conteúdo acima...

 


LEFT OUTER JOIN
(SELECT *
FROM DATAS D1 WHERE D1.DatasDataInicio = (SELECT MIN(D2.DatasDataInicio)
FROM DATAS D2
WHERE D2.DatasCodItem = D1.DatasCodItem) GROUP BY DatasDataInicio)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é saber se uma tabela virtual pode entrar num outer join.

Não tenho como testar isto aqui.

Mas a ideia seria

 

 

select ....
from tabela1
left outer join (select ....
                 from ...
                 where ...) on ...

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.