我真的不明白这个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/

10-16 18:21