Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

inner join with empty result from right table

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

like image 350
dav Avatar asked Aug 16 '26 06:08

dav


1 Answers

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.

like image 118
Wirus Avatar answered Aug 17 '26 22:08

Wirus



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!