我正在尝试自我加入关系演员(movie_id,cast_id,cast_name)。我想查询一对演员至少一起出现在 1 部电影中。必须排除自身对,并保留镜像对。这是关系表:
电影编号 | cast_id | cast_name |
---|---|---|
12345 | 10 | 中 |
12340 | 10 | 中 |
12341 | 10 | 中 |
12342 | 10 | 中 |
12343 | 11 | 蒂 |
12340 | 12 | 尼 |
12341 | 12 | 尼 |
12342 | 12 | 尼 |
12343 | 12 | 尼 |
12340 | 13 | 大卫 |
12345 | 12 | 尼 |
这是我尝试过的:
SELECT c.cast_id, c2.cast_id, c.movie_id
FROM casts c, casts c2
WHERE c.cast_id != c2.cast_id AND c.movie_id = c2.movie_id;
我没有得到成对的不同cast_id
,而是成对的相同cast_id
。
cast_id | cast_id | 电影编号 |
---|---|---|
10 | 10 | 12345 |
10 | 10 | 12340 |
10 | 10 | 12340 |
10 | 10 | 12341 |
10 | 10 | 12342 |
11 | 11 | 12343 |
12 | 12 | 12340 |
12 | 12 | 12340 |
12 | 12 | 12341 |
12 | 12 | 12342 |
12 | 12 | 12343 |
13 | 13 | 12340 |
13 | 13 | 12340 |
12 | 12 | 12345 |
但是,如果我尝试将其中一个属性替换为cast_name
喜欢,我会得到不同的演员对:
SELECT c.cast_name, c2.cast_id, c.movie_id
FROM casts c, casts c2
WHERE c.cast_id != c2.cast_id AND c.movie_id = c2.movie_id;
cast_id | cast_id | 电影编号 |
---|---|---|
尼 | 10 | 12345 |
大卫 | 10 | 12340 |
尼 | 10 | 12340 |
尼 | 10 | 12341 |
尼 | 10 | 12342 |
尼 | 11 | 12343 |
大卫 | 12 | 12340 |
中 | 12 | 12340 |
中 | 12 | 12341 |
中 | 12 | 12342 |
蒂 | 12 | 12343 |
尼 | 13 | 12340 |
中 | 13 | 12340 |
中 | 12 | 12345 |
您能否解释一下这种行为的原因以及如何解决它以获得预期的结果?谢谢!