MySQL查询包括相关表中没有相应记录的记录

时间:2014-06-25 18:13:31

标签: mysql

在MySQL中遇到这个问题有点困难。我试图从资源表和预订日期返回结果。所以我的最终结果将是这样的

              |Mon|Tue|Wed|Thu|Fri|Sat|Sun|Mon|Tue|Wed|Thu|Fri|Sat|
Resource Name | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13|
--------------+---+---+---+---+---+---+---+---+---+---+---+---+---|
Resource1     |   |   | X | X | X |   | X | X | X |   |   | X |   |
Resource2     |   |   |   |   |   |   |   |   |   |   |   |   |   |
Resource3     |   | X | X | X | X | X |   |   | X | X | X |   |   |
Resource4     |   |   |   | X |   |   |   |   |   |   |   |   |   |
Resource5     |   |   |   |   |   |   |   |   | X |   |   |   |   |

我的问题出现在上表中的Resource2,因为它没有预订。

我有两张桌子,一张包含我的资源,另一张包含我的预订。我的预订表包含我资源的唯一ID:

预订:bookings.id,bookings.first_date,bookings.last_date,bookings.resource_id

resources:resources.id,resource.name

资源可以有很多预订,相反,在这种情况下,预订只能有一个资源。

我的前端可以处理日期范围,所以我不需要为每天预订资源返回记录,只需要返回日期范围。

使用以下方法很容易获得预订所在的资源列表:

SELECT resources.name, bookings.id, bookings.first_date, bookings.last_date, bookings.property_id FROM resources
LEFT JOIN bookings ON (bookings.resource_id = resources.id)
WHERE bookings.first_date  > NOW()
ORDER BY resources.name

但我发现获取所有资源的列表以及将它们作为单个结果预订时更具挑战性。

根据我上面的示例表,什么是获得包含任何资源而无需任何预订的结果的有效方法。

非常感谢提前

1 个答案:

答案 0 :(得分:0)

所以这是一个有效的解决方案。

SELECT DISTINCT resources.name, bookings.id, bookings.first_date, bookings.last_date, bookings.property_id 
FROM resources
LEFT JOIN bookings ON bookings.resource_id = resources.id AND bookings.first_date  > NOW()
ORDER BY resource.name