Избегать двойного соединения подзапроса SQL для правого элемента в PostgreSQL? - PullRequest
1 голос
/ 08 февраля 2020

Я пытаюсь оптимизировать запрос sql и хочу посмотреть, как можно избежать подзапросов при повторном соединении с полученной таблицей. У меня есть следующий запрос из базы проката DVD, предоставленный postgresql, и я присоединился к трем таблицам с целью получения категории фильма. Я знаю, что могу использовать CTE или временную таблицу, но мне было интересно, есть ли более короткий путь к достижению sh того, что ниже:

--------get the category of a film
--------link film table to category id table with film id
--------then link resulting table to the category name table with category_id
SELECT
t1.title,
t1.film_id,
t1.category_id,
c.name
FROM
(
SELECT 
f.title,
f.film_id,
fc.category_id
FROM
film as f 
left join film_category as fc on f.film_id = fc.film_id     
    ) as T1 left join category as c on t1.category_id = c.category_id
ORDER by title

1 Ответ

2 голосов
/ 08 февраля 2020

Не понимаю, почему у вас вообще есть какие-то подзапросы:

SELECT f.title, f.film_id, fc.category_id, c.name
FROM film f LEFT JOIN
     film_category fc 
     ON f.film_id = fc.film_id LEFT JOIN   
     category c 
     ON fc.category_id = c.category_id
ORDER by f.title
...