Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Excluir par de linhas em uma consulta sql


thiagogoiis

Question

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á.

Edited by thiagogoiis
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...