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

标签 mysql sql

我有一个旅游数据库(带导游的团体城市旅游)。我需要的是一个 SQL 查询(用于 mysql 5.1.54 数据库),它最终会给我一个 PHP 数组,其中包含来自多个表的组合信息。我可以通过仅对前 3 个表进行查询然后在 foreach 循环中添加表 4 和表 5 中的信息来完成此操作。

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

  1. 必须包含没有合作伙伴(表 4)和/或向导(表 5)的预订。
  2. 结果中必须包含所有合作伙伴和向导(预订可以有更多合作伙伴/向导)
  3. 必须包含表 4 和表 5 中的所有信息(如表 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。

最佳答案

要包括所有没有合作伙伴和向导的预订,您需要使用 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

关于mysql - SQL查询mysql数据库中的多个(一对多)表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394015/

相关文章:

php - while 或 foreach 与 if 循环

php - 未显示最后一个 ID

mysql - 预设/自定义选择问题的数据库设计

sql限制计数查询

sql - 来自 SQL Server 存储过程的 Excel 中的表以及工作簿中的参数字段

php - PHP 和 MySQL 中相同查询的不同 SQL 结果

mysql - 节点MySQL上的连接过多

php - MySQL删除重复的反向值

mysql - 执行 UPDATE 查询时是否可以使用 ON DUPLICATE KEY 功能?

mysql - 仅当值不存在时返回行