saoricate Postado Abril 1, 2011 Denunciar Share Postado Abril 1, 2011 (editado) Olá, estou tenho um problema com uma query.Tenho duas tabelas: 'Trabalho' e 'Imagem'Trabalho tem os dados: idTrabalho, tituloTrabalho, dtTrabalhoImagem tem os dados: idImagem, idTrabalho, caminhoImagemO problema é que gostaria que a query retornasse apenas um trabalho e uma imagem dele, mas retorna o seguinte:idTrabalho tituloTrabalho dtTrabalho idImagem caminhoImagem1 oi 10/02/1998 1 teste1 oi 10/02/1998 2 teste22 teste 10/02/2000 3 teste3Como 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 iON t.idTrabalho = i.idTrabalhoORDER BY NEWID()pois preciso de linhas aleatórias. Editado Abril 1, 2011 por saoricate Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Abril 1, 2011 Denunciar Share Postado Abril 1, 2011 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 saoricate Postado Abril 1, 2011 Autor Denunciar Share Postado Abril 1, 2011 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) ENDFoi a única resposta que consegui encontrar para o problema. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Abril 1, 2011 Denunciar Share Postado Abril 1, 2011 se for randômico, ao invés de utilizar o MAX, tente utilizar o DISTINCT, com ORDER BY NEWID() Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
saoricate
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 saoricateLink para o comentário
Compartilhar em outros sites
3 respostass 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.