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

(Resolvido) Excluir par de linhas em uma consulta sql


thiagogoiis

Pergunta

Tenho que fazer uma consulta no seguinte banco.

Estudante (ID, nome, serie)

Amigo (ID1, ID2) -> simétrica, ou seja, ID1 é amigo de ID2 então, ID2 é amigo de ID1

Gosta (ID1, ID2) -> assimétrica, ou seja, se ID1 gosta de ID2 não necessariamente ID2 gosta de ID1

Então, o que e preciso é o seguinte:

Busca nome e serie de todos os casos em que ambas pessoas se gostam, ou seja, se ID1 gosta de ID2 então, ID2 gosta de ID1. Eliminando o par duplicado.

A busca que eu gerei foi a seguinte:

SELECT E1.NOME, E1.SERIE, E2.NOME, E2.SERIE

FROM ESTUDANTE E1, ESTUDANTE E2, GOSTA G1, GOSTA G2

WHERE E1.ID = G1.ID1 AND E2.ID = G1.ID2 AND E1.ID = G2.ID2 AND E2.ID = G2.ID1

Com essa busca o resultado que obtive foi:

Gabriel - 9 - Cassandra - 9

Cassandra - 9 - Gabriel - 9

Alexis - 11 - Kyle - 12

Kyle - 12 - Alexis - 11

O resultado que eu necessito é:

Gabriel - 9 - Cassandra - 9

Alexis - 11 - Kyle - 12

Ou seja, o que preciso é apenas remover o par mas, eu não estou conseguindo de nenhuma maneira que eu saiba.

Ajudem-me.

Grato desde já.

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

6 respostass a esta questão

Posts Recomendados

  • 0
Bom dia thiagogoiis,

Desculpe pela pergunta... mas isso é trabalho de faculadade / Curso?

:)

Foi um trabalho.

É que é assim, foram quase 20 questões numa prova prática. Da semana passada. Esse foi um dos exercícios que eu não consegui fazer.

Quando pedi para meu professor me falar como fazer ele, ele me disse que queria que eu pesquisasse.

Então, eu já consegui fazer todos os outros exercícios. Porém, esse foi o único que fiquei sem saber. Já pedi ajuda à quase todos os meus colegas de sala e eles me disseram que não estavam conseguindo fazer esse exercício.

Não estou postando aqui sem pesquisar.

Eu gosto do desafio mas, esse exercício, eu não estou conseguindo fazer.

P.S.: Igual eu disse, e mostrei, formulei uma consulta. Não estou fazendo corpo mole. Só que com o que eu sei, não consigo tirar essa linha duplicada, só isso.

Se você não quiser me dar a resposta me guie para uma referência onde me mostre como proceder com o problema. Por favor.

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Thiago,

rs... sem problemas. Pergunto porque não costumo ajudar pessoas q estão fazendo faculdade ou curso. Muitos postam trabalhos e esperam soluções fáceis... rs (não estou falando de vc).

Pois bem... tenho uma dúvida: como deve ser a resolução deste exercício? Apenas 1 select? Ou pode fazer do jeito q quiser?

OBS.: A linha não se encontra duplicada. Perceba que os dados estão misturados. Para o sql, as linhas são distintas.

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz um exemplo logo abaixo. Criei as temporárias e fiz os testes (está comentado). Dê uma olhada. Caso seja isto e não entenda, posta aí q explico passo a passo:

-- criar temporária
CREATE TABLE #Estudante (Id INT, nome VARCHAR(20), Serie int)
CREATE TABLE #Gosta (Id1 INT, Id2 INT)

-- inserção dos dados
INSERT INTO #Estudante VALUES (1, 'Gabriel', 9)
INSERT INTO #Estudante VALUES (2, 'Cassandra', 9)
INSERT INTO #Estudante VALUES (3, 'Alexis', 11)
INSERT INTO #Estudante VALUES (4, 'Kyle', 12)

INSERT INTO #Gosta values(1, 2)
INSERT INTO #Gosta values(2, 1)
INSERT INTO #Gosta values(3, 4)
INSERT INTO #Gosta values(4, 3)

-- select para conferir os dados
SELECT * FROM #Estudante
SELECT * FROM #Gosta

-- seu select, utilizando os dados inseridos na temporária
SELECT E1.NOME, E1.SERIE, E2.NOME, E2.SERIE
FROM #ESTUDANTE E1, #ESTUDANTE E2, #GOSTA G1, #GOSTA G2
WHERE E1.ID = G1.ID1 AND E2.ID = G1.ID2 AND E1.ID = G2.ID2 AND E2.ID = G2.ID1

-- Meu select
SELECT E1.NOME, E1.SERIE, E2.NOME, E2.SERIE 
FROM #ESTUDANTE E1, #ESTUDANTE E2, #GOSTA G WHERE E1.Id=G.Id1 AND E2.Id=G.Id2
and E1.id IN (SELECT MIN(ID1) FROM #GOSTA GROUP BY ID1*ID2 HAVING COUNT (ID1*ID2)>1)

Link para o comentário
Compartilhar em outros sites

  • 0

A sugestão do Fulvio funcionou para resolver o meu problema e depois de muito quebrar a cabeça também consegui elaborar uma outra consulta que retornou uma pesquisa do jeito que eu queria.

SELECT E1.NOME, E1.SERIE, E2.NOME, E2.SERIE

FROM ESTUDANTE E1, ESTUDANTE E2, GOSTA G1, GOSTA G2

WHERE E1.ID = G1.ID1 AND E2.ID = G1.ID2 AND E1.ID = G2.ID2 AND E2.ID = G2.ID1 AND E1.NOME < E2.NOME

Faltava somente a parte que garantia que um dado nome só seria apresentado se ele fosse menor que o da segunda coluna.

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

rs... com a nova informação "nome só seria apresentado se ele fosse menor que o da segunda coluna" ai fica fácil!!!

Gostei do exercício Thiago. Dá pra quebrar a cabeça com ele. Sem esta informação que passou, não teria como fazer sem subselect. Pede pro professor retirar esta informação e refazer o exercício.

Um bom exercício!

Qualquer dúvida que tiver, estamos ai...

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...