0

我有2张桌子,餐厅和订单,每家餐厅都有很多订单

restaurants table
id
name


orders table
id
restaurant_id
date
status

如果某个日期没有订单 - 这意味着订单表中没有行。如果有订单,其状态可以是 0、1 或 2。orders 表中的每一行代表一天。

我需要找到那些在2013-08-15and之间2013-08-25(包括当天 - 2013-08-19)根本没有订单(这意味着订单表中没有适当的行)或订单状态为 0 或 1 的餐厅,但还有这些条件今天的订单应该有状态 - 2。所以,如果某个餐厅没有今天的订单或者它的状态不是 2 - 这家餐厅不应该在结果中列出,但是如果今天的订单存在并且它的状态是 2结果应包含该餐厅以及上述日期范围内的所有订单列表。

通过这个查询,我得到了没有今天条件部分的结果。

SELECT r.`id`, r.`name`
FROM restaurants r
LEFT JOIN orders o ON r.id = o.restaurant_id AND o.date between '2013-08-15' AND '2013-08-25'
where o.id is null OR o.`status` = 0 OR o.status = 1

我怎样才能添加那个条件呢?

谢谢

4

1 回答 1

0

我会单独进行查询并将结果合并。从您的查询中排除今天,为今天添加一个单独的查询。就像是:

SELECT r.id, r.name FROM restaurants r LEFT JOIN orders o ON r.id = o.restaurant_id AND o.date between '2013-08-15' AND '2013-08-25' AND o.date <> '2013-08-19' -- current day where o.id is null OR o.status = 0 OR o.status = 1 UNION SELECT r.id, r.name FROM restaurants r INNER JOIN orders o ON r.id = o.restaurant_id AND o.date = '2013-08-19' -- current day where o.status = 2

于 2014-08-07T00:48:22.683 回答