sql: получить таблицу с одним столбцом, упорядочить по столбцу из другой таблицы - PullRequest
0 голосов
/ 18 июня 2020

У меня есть взаимосвязанные таблицы.

movies (main, parent) : id | title | year
people (child) : people_id | name | birthyear
ratings (child) : movie_id | rating | votes
stars (child) : movie_id | person_id

Мне нужно сделать запрос, чтобы получить вывод одного столбца из таблиц «фильмы-люди-звезды» и упорядочить его по столбцу из таблицы «рейтинг» без присоединения столбца «рейтинг» к моему выходу .

Мой код:

SELECT title from movies
where id in (select movie_id from stars
         where person_id in(select id from people where name = "Chadwick Boseman"))LIMIT 5;

Возвращает все названия фильмов, в которых играет Чедвик Боузман. Мне нужно отсортировать их по рейтингу. Как это сделать?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Хотя это никогда не было бы сделано без соединения, поскольку это домашнее задание, вы можете использовать коррелированный подзапрос для таблицы ratings в предложении ORDER BY:

select m.title
from movies m
inner join stars s on s.movie_id = m.id
inner join people p on p.people_id = s.person_id
where p.name = 'Chadwick Boseman'
order by (select r.rating from ratings r where r.movie_id = m.id) desc
limit 5

Вы также можете использовать ваш запрос и добавьте предложение ORDER BY:

select m.title 
from movies m
where m.id in (
  select movie_id 
  from stars
  where person_id in(
    select id 
    from people 
    where name = 'Chadwick Boseman'
  )
)
order by (select r.rating from ratings r where r.movie_id = m.id) desc
limit 5;
0 голосов
/ 18 июня 2020

Вам необходимо включить столбец в список выбора, чтобы отсортировать его по этому столбцу. Упорядочить по сортировке вывода в указанном вами порядке столбца. Кроме того, почему вы не можете использовать JOIN для своего запроса, как показано ниже.

SELECT m.title,d.rating 
FROM movies m
JOIN stars s ON s.movie_id = m.id
JOIN people p ON p.id = s.person_id 
JOIN tbl d ON d.xx = z.yy  ----- JOIN the table d here and use it in select . replace z,xx and yy with actual table name and columns.
WHERE p.name = "Chadwick Boseman" 
ORDER BY d.rating
LIMIT 5

обновлено * - он может работать, но не может тестировать, поскольку у меня нет доступа к фактическим данным и таблицам.

SELECT m.title
FROM movies m
JOIN stars s ON s.movie_id = m.id
JOIN people p ON p.id = s.person_id
WHERE p.name = 'Chadwick Boseman'
AND m.id in (SELECT top 5 movie_id 
             FROM ratings r
             WHERE r.movie_id = m.id 
             ORDER BY ratings desc) 
...