我的桌子很少。
如果我简要解释这些表格,
categories
是食物类别。例如:-蛋糕
item
就像是食物的子类别。例如:-巧克力蛋糕。
restaurant_items
是属于特定餐厅的item的一个实例。例如:- ABC餐厅的巧克力蛋糕。
restaurants
顾名思义就是一家餐馆,而regions
是restaurant
所在的区域。
最重要的一个 new_sponsoreds是餐馆在广告中宣传其食品的地方。
runday | category_id | restaurant_id
2018-12-5 | 23 | 45
此new_sponsoreds
表表明,我们需要在restaurant_items
(其中餐厅ID为45的category_id
为23)上投放广告。
我的使用案例
从给定的restaurant_items
中获取所有region
,然后进行过滤
restaurant_items
category
,最后右外部联接,结果是new_sponsoreds
。
这样,食品应用程序用户就可以从restaurant_items
(纽约)获得region
,并通过category
(蛋糕)进行过滤。
此查询用于获取restaurant_items
。
SELECT restaurant_items.* FROM test2.restaurant_items
inner join items on restaurant_items.item_id = items.Item_id
inner join categories on items.category_id = categories.id
inner join restaurants on restaurant_items.restaurant_id = restaurants.Restaurant_id
where restaurants.region_id = 7 and categories.id = 33
这很好。但是,当我尝试将此结果与new_sponsoreds
表合并时,
SELECT restaurant_items.*,new_sponsoreds.* FROM test2.restaurant_items
inner join items on restaurant_items.item_id = items.Item_id
inner join categories on items.category_id = categories.id
inner join restaurants on restaurant_items.restaurant_id = restaurants.Restaurant_id
left outer join new_sponsoreds on categories.id = new_sponsoreds.category_id
where restaurants.region_id = 7 and categories.id = 33
and new_sponsoreds.runday = current_date()
此查询返回空行集。
但是我期望的是,该查询将为我提供restaurant_items
和region
的所有category_id
过滤器,并且如果一家餐厅今天推广了某个类别,则其中还将包括结果。
id |restaurant_id | Item_id | runday | category_id | restaurant_id
1 |12 | 23 |2018-12-04 | 25 | 12
2 |12 | 45 |null | null | null
3 |15 | 23 |null | null | null
这是我的例外结果表,其中restaurant_id
的{{1}}和Item_id
以及restaurant_items
的其他结果
在这里,第一个记录匹配new_sponsoreds
,因为left outer join
12在2018-12-04晋级restuarant_id
25。
第二条记录即使属于同一家餐馆,也不匹配,category_id
不等于25。
第三条记录与第一条记录具有相同的category_id
。但是它与联接不匹配,因为它属于另一家餐厅。
这是我的预期结果。但是将左联接部分添加到查询后,我什么也没得到。为什么会发生这种情况?
答案 0 :(得分:0)
SELECT restaurant_items.*,new_sponsoreds.* FROM test2.restaurant_items
inner join items on restaurant_items.item_id = items.Item_id
inner join categories on items.category_id = categories.id
inner join restaurants on restaurant_items.restaurant_id = restaurants.Restaurant_id
left outer join new_sponsoreds on categories.id = new_sponsoreds.category_id
and new_sponsoreds.runday = current_date() and new_sponsoreds.restaurant_id = restaurants.Restaurant_id
where restaurants.region_id = 7 and categories.id = 33
正如评论所建议的那样,我将纬度线向上移动了一个,并将此部分添加到了左外部连接处
and new_sponsoreds.restaurant_id = restaurants.Restaurant_id