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

时间:2011-12-06 00:55:35

标签: mysql sql

我有一个带游览的数据库(团体城市游览指南)。我需要的是一个SQL查询(对于一个mysql 5.1.54数据库),它最终会给我一个PHP数组,其中包含多个表中的信息。我能够通过对前3个表进行查询然后在foreach循环中添加表4和表5中的信息来实现此目的。

但是,我需要使用查询进行搜索/过滤(例如:显示所有预订,其中合作伙伴的ID为9)所以我需要SQL来选择相应的预订。

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

    表1:预订:

    id    id_client    id_tour
    1     22            6
    2     23            5
    

    表2:客户(一个预订有一个客户):

    id    name
    22    John
    23    William
    

    表3:旅游(一次预订有一次旅行)

    id    name
    5     big tour
    6     small tour    
    

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

    id    id_reservation    id_partner_type    id_partner    status
    34    1                 9                  16            1
    35    1                 9                  17            0
    

    表5:指南(一个预订可以有多个指南):

    id    id_reservation    id_guide
    18    1                 14
    19    1                 15
    

    我试图解决这个问题,但我无法获得完成这项工作的查询。我使用GROUP_CONCAT来获取多个合作伙伴和指导ID。我遇到的最大问题是无法包含没有合作伙伴和/或指南的预订,例如预订2。

1 个答案:

答案 0 :(得分:0)

要包含所有没有合作伙伴和指南的预订,您需要使用OUTER JOINs,例如,以下查询将为您提供表格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