У меня есть несколько таблиц, а именно.
- категории
- элементы
- restaurant_items
- рестораны
- new_sponsoreds
- регионов
Если я кратко объясню эти таблицы,
categories
- это категории продуктов питания.Например: - Торт
item
походит на подкатегорию для еды.Например: - Шоколадный торт .
restaurant_items
- это экземпляр предмета, который принадлежит конкретному ресторану.Например: - Шоколадное пирожное в ресторане ABC .
restaurants
, как следует из названия, подразумевает только ресторан, а regions
- это область, где restaurant
находится по адресу.
НАИБОЛЕЕ ВАЖНО new_sponsoreds - это место, где рестораны рекламируют свои продукты в качестве рекламы.
runday | category_id | restaurant_id
2018-12-5 | 23 | 45
Эта таблица new_sponsoreds
указывает на то, что нам нужно запустить рекламу на restaurant_items
, где category_id
- 23, в ресторане - 45.
МОЙ ИСПОЛЬЗОВАТЬ СЛУЧАЙ
Получить все 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
и Item_id
из restaurant_items
и другие из new_sponsoreds
Здесь первая запись соответствует left outer join
, потому что restuarant_id
12 там продвигается category_id
25 в 2018-12-04.
Вторая запись не совпадает, даже если она принадлежит тому же ресторану, она category_id
не равна 25.
Третья запись имеет тот же category_id
, что и первая запись.Но это не соответствует объединению, потому что оно принадлежит другому ресторану.
Это мои ожидаемые результаты.Но я ничего не получаю после того, как добавил в свой запрос левую часть соединения.Почему это могло произойти?