MYSQL 查询、集合论和大于

MYSQL queries, set theory and greater than

我有一个数据库,其中有 2 个表,一个用于奖项,一个用于电影。 Table 电影具有评分和 (PK) 电影标题:

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

Table awards有片名(FK)、奖项、结果(获奖或提名):

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

我要执行的查询是查找获得同一奖项提名的所有电影对 (m1, m2),使得 m1 具有 评分高于 m2 ,但 m2 获得了奖项。 结果应该 return:

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

我尝试过内部连接,但每次它只会显示不同的值。改动 return 产生了错误的结果。 我试过的代码示例:

 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;

您必须加入 moviesawards 两次:

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)

因为会返回多对行。
demo.
结果:

> title      | award | result    | rating
> :--------- | :---- | :-------- | -----:
> Avatar     | oscar | won       |      5
> mid summer | oscar | nominated |      7