SQL - выбор строк на основе фильтров для двух разных отношений - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать ежедневное меню для своих пользователей на основе всех блюд, которые у меня есть для их хабов сегодня . Вот как выглядит моя база данных: schema

Вот именно то, что я хочу получить запросом:

Give me the emails of the users who have daily_email set to True with the information of their company and the hub their company belongs to. 
For each user, I need to see the meals available for them along with the information of the restaurant this meal belongs to.

Пока я пытался использовать INNER JOINS и смешивая все таблицы вместе, затем делаю фильтры, которые я хочу. Это дало мне то, что я хотел, но с ужасной производительностью. Я в основном не ищу оптимальное решение, но, по крайней мере, такое, которое имеет приемлемую производительность.

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 12 марта 2020

Нет другого способа, кроме объединения всех таблиц на основе их отношений:

select u.email, c.name, h.name, m.name, r.name
from users u
inner join companies c on c.id = u.company_id
inner join hubs h on h.id = c.hub_id
inner join hubs_meals hm on hm.hub_id = h.id
inner join meals m on m.id = hm.meal_id
inner join restaurants r on r.id = m.restaurant_id
where u.daily_email

Убедитесь, что все внешние ключи проиндексированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...