MYSQL запросов, теория множеств и больше - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть база данных, в которой есть 2 таблицы: одна для наград и одна для фильмов. Настольные фильмы имеют рейтинг и (PK) mov ie название:

 |  title      |  rating
 |  Avatar     |   5.0
 |  mid summer |   7.0
 |  terminator |   8.0

Настольные награды имеют mov ie название (FK), награда, результат (выигран или номинирован):

   |title        |  award |  result     |
   |avatar       |  oscar |   won       |
   |mid summer   |  oscar |   nominated |
   |terminator   |  bafta |   nominated |

Запрос, который я пытаюсь выполнить, состоит в том, чтобы найти все пары фильмов (m1, m2), номинированных на одну и ту же награду, так что m1 имеет более высокий рейтинг, чем m2, но m2 выиграл награду. Результат должен вернуть:

 |avatar    | oscar |won       | 5.0
 |midsummer | oscar |nominated | 7.0

Я пробовал внутреннее соединение, но каждый раз он будет показывать только разные значения. Изменения вернули неправильный результат. пример кода, который я пробовал:

 select a.award as 'Award', a.result as 'Result', m.rating as 'Average 
 rating',  m.title as 'Movie'  from awards as a
 inner join movies as m 
 on a.title = m.title
 where a.result ='won' or a.result = 'nominated'
 group by a.award;

1 Ответ

0 голосов
/ 16 апреля 2020

Вы должны присоединиться movies к awards дважды:

select m1.title, a1.award, a1.result, m1.rating
from movies m1 
inner join awards a1 on a1.title = m1.title 
inner join awards a2 on a2.award = a1.award and a2.result <> a1.result
inner join movies m2 on m2.title = a2.title
where case a1.result when 'won' then m1.rating else m2.rating end <
      case a1.result when 'won' then m2.rating else m1.rating end 

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

order by 
  case a1.result when 'won' then a1.title else a2.title end,
  least(m1.rating, m2.rating),
  greatest(m1.rating, m2.rating)

, потому что будет несколько пар строки возвращены. Смотрите демо . Результаты:

> title      | award | result    | rating
> :--------- | :---- | :-------- | -----:
> Avatar     | oscar | won       |      5
> mid summer | oscar | nominated |      7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...