Ir para conteúdo
Fórum Script Brasil
  • 0

Não repetir dados


saoricate

Pergunta

Olá, estou tenho um problema com uma query.

Tenho duas tabelas: 'Trabalho' e 'Imagem'

Trabalho tem os dados: idTrabalho, tituloTrabalho, dtTrabalho

Imagem tem os dados: idImagem, idTrabalho, caminhoImagem

O problema é que gostaria que a query retornasse apenas um trabalho e uma imagem dele, mas retorna o seguinte:

idTrabalho tituloTrabalho dtTrabalho idImagem caminhoImagem

1 oi 10/02/1998 1 teste

1 oi 10/02/1998 2 teste2

2 teste 10/02/2000 3 teste3

Como faço para não mostrar esta segunda linha?

EDIT: A query que estou usando é:

SELECT TOP 3 (t.idTrabalho, t.tituloTrabalho, t.dtTrabalho, i.idImagem, i.caminhoImagem)

FROM trabalho as t INNER JOIN imagem as i

ON t.idTrabalho = i.idTrabalho

ORDER BY NEWID()

pois preciso de linhas aleatórias.

Editado por saoricate
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Saoricate,

O certo seria você utilizar um Distinct ou um Group By..... mas no seu caso nenhum dos dois comandos funcionarão, pois no resultado está tendo dados não comuns. Por isto que o sql está duplicando as linhas com o idTrabalho =1.

O que pode ser feito é realizar outro filtro. Coloquei um exemplo logo abaixo e filtrei o resultado retornando o maior idImagem para a coluna idTrabalho.

Dá uma olhada:

SELECT t.idTrabalho, t.tituloTrabalho, t.dtTrabalho, i.idImagem, i.caminhoImagem 
FROM Trabalho as t INNER JOIN Imagem as i
ON t.idTrabalho = i.idTrabalho 
AND i.idImagem IN (SELECT MAX(idImagem) FROM Imagem GROUP BY idtrabalho)
order BY 1

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, Fulvio.

Sua solução funcionou aqui, mas como a idImagem também precisa ser aleatória eu utilizei o seguinte código:

CREATE SP_RandomTrabalho

AS
BEGIN

DECLARE @trabalho1 int
DECLARE @trabalho2 int
DECLARE @imagem1 int
DECLARE @imagem2 int

SET @trabalho1 = (SELECT TOP 1 idTrabalho FROM Trabalho ORDER BY NEWID())
SET @trabalho2 = (SELECT TOP 1 idTrabalho FROM Trabalho WHERE idTrabalho!=@trabalho1 ORDER BY NEWID())
SET @imagem1 = (SELECT TOP 1 idImagem FROM Imagem WHERE idTrabalho=@trabalho1 ORDER BY NEWID())
SET @imagem2 = (SELECT TOP 1 idImagem FROM Imagem WHERE idTrabalho=@trabalho2 ORDER BY NEWID())

SELECT t.idTrabalho, tituloTrabalho, descricaoTrabalho txtTrabalho, dtTrabalho, corPagina, corTexto, idImagem, caminhoImagem, thumbImagem, legendaImagem  
FROM trabalho as t INNER JOIN imagem as i 
ON t.idTrabalho = i.idTrabalho 
WHERE (t.idTrabalho = @trabalho1 OR t.idTrabalho = @trabalho2) AND (i.idImagem = @imagem1 OR i.idImagem = @imagem2)

END

Foi a única resposta que consegui encontrar para o problema.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...