1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

SQL - Duplo INNER JOIN sobre a mesma tabela

Discussão em 'Programação' iniciada por Bro840, 18 de Agosto de 2012. (Respostas: 10; Visualizações: 6256)

  1. Bro840

    Bro840 Power Member

    Tenho duas tabelas

    Tabela ENCONTROS que guarda os dados sobre jogos de futebol (ID, ID_Competicao, Jornada, Visitado, Visitante, Data)
    Tabela EQUIPAS que guarda os dados sobre as equipas (ID, Equipa)

    Vi na net mas não resulta, já tentei de tudo...

    SELECT ENCONTROS.ID, ENCONTROS.ID_COMPETICAO, ENCONTROS.JORNADA, VISITADO.EQUIPA AS VISITADO, VISITANTE.EQUIPA AS VISITANTE
    FROM ENCONTROS
    INNER JOIN EQUIPAS as VISITADO ON ENCONTROS.ID_EQUIPA_CASA = VISITADO.ID
    INNER JOIN EQUIPAS as VISITANTE ON ENCONTROS.ID_EQUIPA_FORA = VISITANTE.ID
     
    Última edição: 18 de Agosto de 2012
  2. legion

    legion Power Member

    Se fizeres 1 INNER JOIN entre as duas tabelas irás ter acesso a todos os dados presentes em ambas as tabelas..

    Sinceramente, qual o objectivo? O que queres mostrar?
     
  3. Bro840

    Bro840 Power Member

    O campo Visitado e Visitante são numeros que correspondem ao ID das esquipas respectivas e cujos os nomes estão guardados na tabela Equipas...
     
  4. Bro840

    Bro840 Power Member

    Acontece que tenho de fazer dois inner joins porque preciso de saber o nome da equipa visitada e também tenho de saber o nome da equipa visitante.

    Estes dois campos Visitado e Visitante na tabela Encontros são IDs, já na tabela Equipas associado ao ID guardo a Equipa e também outras informações como Estádio, Presidente, Treinador etc...

    Mas para este caso só que saber o nome, ou seja quero sacar as informações de um dado encontro, Competição, Jornada, "Visitado", "Visitante" etc.
     
  5. legion

    legion Power Member

    Isto não te chega?

    Código:
    select *
    from encontros en INNER join equipas eq using (id)
     
  6. Bro840

    Bro840 Power Member

    Eu estou a fazer um programa em que tenho uma variável que guarda uma informação que é o ID_Competicao, este ID_Competicao indica-me a Época e a Competição em questão, ou seja se é a Primeira Liga ou a Liga espanhola...

    Com isto em mente eu através deste ID_Competicao vou à tabela ENCONTROS (ID, ID_COMPETICAO, JORNADA, ID_VISITADO, ID_VISITANTE, DATA).....

    ..... e faço uma query: "Select * From Encontros Where ID_Competicao = " Variável do programa.... Só que tenho de fazer dois joins, pois o ID_Visitado e o ID_Visitante são números, ou melhor são IDs



    Um join consigo eu fazer na boa mas quando faço o segundo, não consigo. Já tentei variações de sintaxes e nada... Nos exemplos da net é exactamente como tenho no primeiro post
     
    Última edição: 18 de Agosto de 2012
  7. Bro840

    Bro840 Power Member

    Demorou mas foi para grande alegria minha e depois de umas poucas horas a fritar o cérebro...

    Estou a trabalhar com o access e tem uma ligeiras diferenças como sempre para outras plataformas que usam SQL. Então tudo o que faltava eram uns ()

    SELECT ENCONTROS.ID, ENCONTROS.ID_COMPETICAO, ENCONTROS.JORNADA, VISITADO.EQUIPA AS VISITADO, VISITANTE.EQUIPA AS VISITANTE
    FROM (ENCONTROS
    INNER JOIN EQUIPAS as VISITADO ON ENCONTROS.ID_EQUIPA_CASA = VISITADO.ID)
    INNER JOIN EQUIPAS as VISITANTE ON ENCONTROS.ID_EQUIPA_FORA = VISITANTE.ID
     
  8. legion

    legion Power Member

    Só vi agora o tópico e ainda bem que conseguiste. :)

    No entanto estive aqui a fazer uma query, um bocado rebuscada mas funcional:

    Código:
    SELECT t1.equipa as visitante, t2.equipa as visitado 
    FROM equipas t1, equipas t2, encontros en
    WHERE t1.id = en.visitante and t2.id = en.visitado
    
    Penso que serve o teu propósito.

    Abraço
     
  9. Bro840

    Bro840 Power Member

    Obrigado de qualquer forma legion
     
  10. legion

    legion Power Member

    De nada.
     
  11. Expertinfo

    Expertinfo Power Member

    Fazes isto bem feito no SSIS do SQLServer
     

Partilhar esta Página