mysql数据库中多个(一对多)表的SQL查询

mysql数据库中多个(一对多)表的SQL查询,mysql,sql,Mysql,Sql,我有一个旅游数据库(带导游的团体城市旅游)。我需要的是一个SQL查询(针对mysql 5.1.54数据库),它最终将为我提供一个PHP数组,其中包含多个表组合的信息。我可以通过只对前3个表进行查询,然后在foreach循环中添加表4和表5中的信息来实现这一点 但是,我需要使用查询进行搜索/筛选(例如:显示合作伙伴id为9的所有预订),因此我需要SQL来选择相应的预订 必须包括没有合作伙伴(表4)和/或指南(表5)的预订 结果中必须包括所有合作伙伴和指南(预订可以有更多合作伙伴/指南) 必须包括表

我有一个旅游数据库(带导游的团体城市旅游)。我需要的是一个SQL查询(针对mysql 5.1.54数据库),它最终将为我提供一个PHP数组,其中包含多个表组合的信息。我可以通过只对前3个表进行查询,然后在foreach循环中添加表4和表5中的信息来实现这一点

但是,我需要使用查询进行搜索/筛选(例如:显示合作伙伴id为9的所有预订),因此我需要SQL来选择相应的预订

  • 必须包括没有合作伙伴(表4)和/或指南(表5)的预订
  • 结果中必须包括所有合作伙伴和指南(预订可以有更多合作伙伴/指南)
  • 必须包括表4和表5中的所有信息(如表4中的状态)
  • 数据库的简化版本:

    表1:预订:

    id    id_client    id_tour
    1     22            6
    2     23            5
    
    id    name
    22    John
    23    William
    
    id    id_reservation    id_partner_type    id_partner    status
    34    1                 9                  16            1
    35    1                 9                  17            0
    
    id    id_reservation    id_guide
    18    1                 14
    19    1                 15
    
    表2:客户(一个预订有一个客户):

    id    id_client    id_tour
    1     22            6
    2     23            5
    
    id    name
    22    John
    23    William
    
    id    id_reservation    id_partner_type    id_partner    status
    34    1                 9                  16            1
    35    1                 9                  17            0
    
    id    id_reservation    id_guide
    18    1                 14
    19    1                 15
    
    表3:旅游(一次预订一次旅游)

    表4:合作伙伴(一个预订可以有多个合作伙伴):

    id    id_client    id_tour
    1     22            6
    2     23            5
    
    id    name
    22    John
    23    William
    
    id    id_reservation    id_partner_type    id_partner    status
    34    1                 9                  16            1
    35    1                 9                  17            0
    
    id    id_reservation    id_guide
    18    1                 14
    19    1                 15
    
    表5:指南(一个预订可以有多个指南):

    id    id_client    id_tour
    1     22            6
    2     23            5
    
    id    name
    22    John
    23    William
    
    id    id_reservation    id_partner_type    id_partner    status
    34    1                 9                  16            1
    35    1                 9                  17            0
    
    id    id_reservation    id_guide
    18    1                 14
    19    1                 15
    

    我曾试图解决这个问题,但我就是找不到一个能胜任这项工作的查询。我使用GROUP_CONCAT获得多个合作伙伴和向导id。我遇到的最大问题是无法包括没有合作伙伴和/或导游的预订,如预订2

    要包括您需要使用的没有合作伙伴和指南的所有预订,例如,以下查询将提供表4、表5中的所有信息,包括您的情况:

    Select p.*, g.*
    from reservations r  
    left outer join partners p on p.id_reservation = r.id
    left outer join guides g on g.id_reservation = r.id
    where p.id_reservation is null and g.id_reservation is null