inner join with empty result from right table

inner-join, mysql

Solution

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;

Or you can do it using `not exists` as shown in other answers.

Problem

I have 2 tables, restaurants and orders, each restaurant can have many orders ``` restaurants table id name orders table id restaurant_id date ``` I need to find the restaurants that have no orders on some date range. In orders table I save the order dates like - each row represents one day. So, I need to make inner join, but with no results from the orders table. Say, I need to find restaurants that are free from `2013-08-09 to 2013-08-11` date range. How can I achieve this ? How to make a query, that will give the restaurants with no matching in the orders table - according to the date range ? Actually I can do it saving all the dates in the orders table with status not_ordered, and make inner join with `not_ordered = true` condition, but in that case I will have to populate all the table with the dates, which is not a good thing in my case. Thanks

Original source

Related problems