gpt4 book ai didi

MySQL 在同一个查询中使用左连接和一些内连接

转载 作者:行者123 更新时间:2023-11-29 16:35:16 27 4
gpt4 key购买 nike

我的 table 很少。

  1. 类别
  2. 项目
  3. restaurant_items
  4. 餐厅
  5. 新赞助商
  6. 地区

如果我简要解释一下这些表格,

categories 是食物类别。例如:- 蛋糕

item 就像食物的子类别。例如:- 巧克力蛋糕

restaurant_items 是属于特定餐厅的项目实例。例如:- ABC 餐厅的巧克力蛋糕

restaurants 顾名思义就是一家餐厅,regionsrestaurant 所在的区域。

最重要的一个 new_ Sponsored 是餐馆以广告形式宣传其食品的地方。

runday    | category_id | restaurant_id

2018-12-5 | 23 | 45

new_ Sponsoreds 表表明,我们需要在restaurant_items上转换广告,其中category_id为23,而餐厅的id为45。

我的用例

获取给定地区中的所有restaurant_items,然后过滤它们

restaurant_itemscategory,最后右外连接,结果为 new_spokes

这样,美食应用用户就可以从地区(纽约)获取restaurant_items,并按类别(蛋糕)对其进行过滤。

此查询用于获取 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()

此查询返回空行集。但我期望的是,此查询将为我提供来自 regioncategory_id 的所有 restaurant_items 过滤器,以及餐厅是否在今天推广某个类别,这也将包括结果。

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

这是我的异常(exception)结果表,其中 restaurant_idItem_id 来自 restaurant_items 以及其他来自 new_spokes

这里的第一条记录与左外连接匹配,因为restuarant_id 12在2018年12月4日在category_id 25进行促销。

即使属于同一家餐厅,第二条记录也不匹配,它的 category_id 不等于 25。

第三条记录与第一条记录具有相同的category_id。但它与连接不匹配,因为它属于不同的餐厅。

这是我预期的结果。但在将左连接部分添加到查询中后,我什么也没得到。为什么会发生这种情况?

最佳答案

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

关于MySQL 在同一个查询中使用左连接和一些内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53626211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com