你能澄清如下:
1)有多少是很多 2)有多少部分是你在看電影1000/100,000/10,000,000(如個人收藏,小應用,全球圖書館)和您希望如何呈現數據?
邏輯上,如果有合理數量的有限部分(小於10),你可以做一些不太好的sql構造來列出所有以前的部分和未來的部分。如何過,如果你只是在對單以前,如果它存在和未來,如果它存在,你可以嘗試:
解決方案1:(列出所有電影的部分,如果它們存在的prev和next部分)
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結果ANSI SQL標準:1999年,但沒有在後來的標準答覆爲bobince如提及:Is there an ANSI SQL alternative to the MYSQL LIMIT keyword?
您是否使用MySQL和MS訪問? TOP不是標準的SQL,我建議在編寫可移植的SQL時使用ANSI/ISO標準SQL。 – jarlh
是的,我。我認爲TOP 1可以被刪除。 – Robert