簡體   English   中英

內部聯接與右表的空結果

[英]inner join with empty result from right table

我有2個餐桌,餐廳和訂單,每個餐廳可以有很多訂單

restaurants table
id
name


orders table
id
restaurant_id
date

我需要找到在某個日期范圍內沒有訂單的餐館。 在訂單表中,我保存訂單日期,例如 - 每行代表一天。 所以,我需要進行內連接,但沒有來自orders表的結果。 說,我需要找到2013-08-09 to 2013-08-11日期范圍內免費的餐館。 我怎樣才能做到這一點? 如何根據日期范圍進行查詢,這將使訂單表中的餐館沒有匹配?

實際上我可以保存訂單表中狀態為not_ordered的所有日期,並使用not_ordered = true條件進行內部not_ordered = true ,但在這種情況下,我將不得不用日期填充所有表,這不是一件好事。我的情況。

謝謝

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 ,如其他答案中所示。

您不希望為此使用內部聯接。 您可以使用外部聯接,或使用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'
);

我不太了解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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM