doujiaci7976 2012-12-05 03:46
浏览 64
已采纳

使用join构建单个SQL查询。可能吗?

I have 6 tables and I am going to do a single sql statement:

1)participant
  ***********
  +id_participant
  +id_poste
  +name
  +email

2) profile_formaion
  ****************
  +id_poste
  +id_formation

3) formation
  *********
  +id_formation
  +lable

4) poste
  *********
  +id_poste
  +label

5) session
  *********
  +id_session
  +id_formaion
  +lable

6) session_composition
  *********
  +id_session
  +id_participant

EXAMPLE:

DATA:participant

1 | 2 | user1 | user1@mail.com
2 | 3 | user2 | user2@mail.com

DATA:profile_formation

2 | 3
2 | 4

DATA:formation

1 |formation1
2 |formation2
3 |formation3
4 |formation4

DATA: poste

1 |Poste1
2 |Poste2
3 |Poste3

DATA:session

1 |1   /* id_session 1 to id_formation 1  and id_formation=1 is formation1 */

DATA:session_composition

1 |2  /* id_session 1 to id_participant 2 */

I am trying:

SELECT 
    participant.id_participant,
    participant.id_poste,
    participant.name,
    participant.email,
    formation.lable 
FROM participant
INNER JOIN profile_formaion ON
    profile_formaion.id_poste = participant.id_poste 
INNER JOIN formation ON
    formation.id_formation = profile_formaion.id_formation

How can I use sql statement(join) to get the result:

DATA:result

1 | 2 | user1 | user1@mail.com | poste2|formation3
1 | 2 | user1 | user1@mail.com | poste2|formation4
2 | 3 | user2 | user2@mail.com | poste3|formation1 // How can we join to get it.
  • 写回答

1条回答 默认 最新

  • dousong1992 2012-12-05 07:41
    关注

    If your not averse to using unions, you can always do this:

    select
        participant.id_participant,
        participant.id_poste,
        participant.name,
        participant.email,
        poste.label,
        formation.lable
    from
        participant
        inner join poste on participant.id_poste = poste.id_poste
        inner join profile_formaion on participant.id_poste = profile_formaion.id_poste
        inner join formation on profile_formaion.id_formation = formation.id_formation
    
    union all
    
    select
        participant.id_participant,
        participant.id_poste,
        participant.name,
        participant.email,
        poste.label,
        formation.lable
    from
        participant
        inner join poste on participant.id_poste = poste.id_poste
        inner join session_composition on participant.id_participant = session_composition.id_participant
        inner join session on session_composition.id_session = session.id_session
        inner join formation on session.id_formaion = formation.id_formation
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?