gpt4 book ai didi

mysql - 为什么这个 WHERE 子句上的子查询有效?

转载 作者:行者123 更新时间:2023-11-29 04:14:57 25 4
gpt4 key购买 nike

我的电影 table 在这里,

title        year length incolor studioName producerC#

Avengers 2012 142 1 Marvel 12345
First Avenger 2011 123 1 Marvel 38664
Justice League 2017 121 1 DC 11223
Man of Steel 1925 142 1 DC 38664
Man of Steel 2013 142 1 DC 11223
Ted 2012 106 1 Universal 87654
Toy Story 3 2010 102 1 Pixar 23456

我想找到“已用于两部或更多电影的片名。”

答案是“钢铁之躯”,因为这部电影的年份是 1925 年和 2013 年,所以它用了两次。

我的查询在这里。

select distinct movie.title 
from movie, (select * from movie) as temp
where temp.title = movie.title
AND (temp.year != movie.year OR temp.length != movie.length OR temp.studioName != movie.studioName);

作为尊重,结果是我想要的 Man of Steel

但我不明白温度、电影的差异。

两个表的值完全相同,所以 temp.title = movie.title 应该是 select title from movie;

temp.year != movie.year 应该为 null 因为 temp.year != movie.yearselect year from movie where movie .year != movie.year

但结果是“钢铁之躯”,我不明白我错过了什么。

最佳答案

您当前的查询不是最优的。您应该使用显式连接重写它,在本例中为显式自连接:

SELECT DISTINCT
m1.title
FROM movie m1
INNER JOIN movie m2
ON m1.title = m2.title
WHERE
m1.year <> m2.year OR m1.length <> m2.length OR m1.studioName <> m2.studioName;

这里的逻辑是考虑每一对共享相同标题但共享年份、长度或工作室名称的电影。也就是说,查找所有电影标题,使得存在具有相同标题的另一部电影,但一个或多个其他字段不同。

还有另一种使用电影标题聚合来编写查询的方法:

SELECT title
FROM movie
GROUP BY title
HAVING
MIN(year) <> MAX(year) OR
MIN(length) <> MAX(length) OR
MIN(studioName) <> MAX(studioName);

关于mysql - 为什么这个 WHERE 子句上的子查询有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55467366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com