- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含很多电影的电影数据库
。电影可以有前一部分(或下一部分)。我想运行一个查询,显示包含所有之前的电影和所有接下来的电影的列表。该表包含以下列:movie_id
|title
|previous_part
(即上一部分的电影 id)|publication_year
这是我现在拥有的,但它不起作用
SELECT TOP 1 e1.movie_id, e1.title, e1.previous_part
FROM dbo_Movie AS e1 INNER JOIN dbo_Movie AS e2 ON e1.movie_id = e2.previous_part
ORDER BY e1.publication_year;
e1.movie_id
是电影的一个随机部分的参数。
提前致谢!
最佳答案
您能否澄清以下问题:
1) 有多少部电影 1000/100,000/10,000,000 (例如个人收藏、小型应用程序、全局图书馆)2) 您正在查看多少部分?您希望如何呈现数据?
从逻辑上讲,如果有合理数量的有限部分(少于 10 个),您可以创建一些笨拙的 sql 构造来列出所有先前的部分和 future 的部分。但是,如果您正好在前一个(如果存在)和下一个(如果存在)之后,您可以尝试:
解决方案 1:(列出所有电影部分以及上一个和下一个部分(如果存在)
select e1.movie_id, e1.title, pp.movie_id as prev_movie_id, np.movie_id as next_movie_id
from dbo_Movie AS e1
left join dbo_Movie AS pp
ON e1.previous_part = pp.movie_id
left join dbo_Movie AS np
ON np.previous_part = e1.movie_id
预期输出:
movie_id | title | prev_movie_id | next_movie_id
m1p2 | zed | m1p1 | m1p3
m1p3 | zed | m1p2 | null
m1p1 | zed | null | m1p2
m2p1 | phi | null | null
m3p1 | quo | null | m3p2
m3p2 | quo | m3p1 | null
解决方案 2.1:列出所有电影部分以及上一个下一个部分
select e1.movie_id, e1.title, np.movie_id as next_movie_id
from dbo_Movie AS e1
inner join dbo_Movie AS np
ON np.previous_part = e1.movie_id
--inner join means anything rows where this isn't true will be removed
预期输出:
movie_id | title | next_movie_id
m1p2 | zed | m1p3
m1p1 | zed | m1p2
m3p1 | quo | m3p2
解决方案 2.2:列出所有电影部分以及上一个下一个部分
select e1.movie_id, e1.title, pp.movie_id as prev_movie_id
from dbo_Movie AS e1
inner join dbo_Movie AS pp
ON e1.previous_part = pp.movie_id
预期输出:
movie_id | title | prev_movie_id
m1p2 | zed | m1p1
m1p3 | zed | m1p2
m3p2 | quo | m3p1
注释:
1) 空值没有得到干净的处理,而 prev_movie_id 和 next_movie_id 都可以。
2) 显然,SQL:1999 中没有限制结果的 ANSI sql 标准,但 bobince 在回复中提到的后来的标准中有:Is there an ANSI SQL alternative to the MYSQL LIMIT keyword?
关于mysql - 以前的部分?自加盟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27816271/
我是一名优秀的程序员,十分优秀!