我真的不明白这个SQL查询在做什么。我的讲师解释说这部电影不是最短的。有人能告诉我怎么回事吗。
我的想法是,有两种电影关系:
电影-m1
电影-m2
如何比较相同数据的长度?我不明白这个基本概念。
select distinct m1.mvID, m1.title
from movie m1 join movie m2
on m1.length > m2.length;
最佳答案
您的查询将返回所有电影,但最短的电影除外。
假设您的电影桌是这样的:
movie_id | length
---------|-------
AAA | 10
BBB | 20
您正在使用两个不同的别名将电影表与自身连接:
FROM movie m1 JOIN movie m2
下面是发生的事情:
m1.id | m1.len | m2.id | m2.len | is m1.length > m2.length?
------|--------|-------|--------|--------------------------
AAA | 10 | AAA | 10 | No, don't return row
AAA | 10 | BBB | 20 | No, don't return row
BBB | 20 | AAA | 10 | YES RETURN THIS ROW
BBB | 20 | BBB | 20 | No, don't return row
如果您有超过2行,例如长度为30的CCC,那么将多次返回行CCC,因为30>20但30>10,这就是为什么您需要使用SELECT DISTINCT。
关于mysql - SQL联接和比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30705822/