restaurants table
id
name
orders table
id
restaurant_id
date
我需要找到某些日期范围内没有订单的餐馆。在订单表中,我保存订单日期,例如 - 每行代表一天。所以,我需要进行内连接,但没有来自orders表的结果。说,我需要找到免费2013-08-09 to 2013-08-11
日期范围的餐馆。我怎样才能做到这一点?如何根据日期范围进行查询,这将使餐厅在订单表中没有匹配?
实际上我可以保存订单表中状态为not_ordered的所有日期,并使用not_ordered = true
条件进行内部联接,但在这种情况下,我将必须使用日期填充所有表,这是在我的情况下,这不是一件好事。
由于
答案 0 :(得分:9)
select r.*
from restaurant r
left join orders o on r.id = o.restaurant_id and o.date between '...' and '...'
where o.id is null;
或者您可以使用not exists
执行此操作,如其他答案中所示。
答案 1 :(得分:3)
您不希望为此使用内部联接。您可以使用外部联接,或使用NOT EXISTS
和子查询。
以下是后一种方法的一个例子:
select r.id,r.name
from restaurants r
where not exists (
select NULL
from orders o
where o.restaurant_id = r.id
and o.date >= '2013-08-09'
and o.date <= '2013-08-11'
);
答案 2 :(得分:0)
我不太了解mysql,但这应该像普通的SQL一样工作:
SELECT *
FROM restaurants
WHERE NOT EXISTS(SELECT 1
FROM order
WHERE restaurant_id=id AND
date BETWEEN '2013-08-09' AND '2013-08-11')