2015-01-07 1 views
0

У меня есть filmdatabase с большим количеством фильмов. У фильма может быть предыдущая часть (или следующая часть). Я хочу запустить запрос, который представляет список со всеми предыдущими фильмами и всеми последующими фильмами. Таблица имеет следующие столбцы: movie_id | title | previous_part (который является идентификатором фильма предыдущей части) | 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 является paramameter одной случайной части фильма.

Заранее благодарен!

+2

Вы используете как MySQL и MS Access? TOP не является стандартным SQL, я предлагаю придерживаться стандарта ANSI/ISO SQL при написании переносного SQL. – jarlh

+0

Да, я. Я думаю, что TOP 1 можно удалить. – Robert

ответ

0

Вы можете уточнить следующее:

1) Сколько много фильмов 1000/100000/10000000 (например, личной коллекции, небольшое приложение, глобальная библиотека) 2) Сколько частей вы смотрите и как бы вам понравились представленные данные?

Логически разумно, если имеется достаточное количество конечных частей (менее 10), вы можете сделать некоторую неуклюжую конструкцию sql, чтобы перечислить все предыдущие части и будущие части. Как всегда, если вы только после того, как единственная предыдущей, если он существует, и следующий, если он существует, вы можете попробовать:

Решение 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) Там, видимо, нет ANSI SQL стандарт для ограничения результатов в SQL: 1999, но есть в последующих стандартах, как упомянуто bobince в ответ: Is there an ANSI SQL alternative to the MYSQL LIMIT keyword?

+0

Большое спасибо за ваш ответ. К сожалению, он еще не работает. У меня около 400 000 фильмов в моей БД. У меня есть кнопка в Access. Он открывает этот запрос, и у него есть параметр с movie_id. Например: Я выбираю, чтобы увидеть все части быстрого и яростного, когда я нажимаю кнопку быстрого и яростного 4. Затем я хочу, чтобы список показывал ТОЛЬКО быструю и яростную части. Итак: - быстрый и яростный 1 - быстрый и яростный 2 -.... - быстрый и яростный 6 – Robert

+0

Хорошо, так используется прецедент, который вы только когда-нибудь будете запрашивать у одного фильма? Кроме того, вы можете предоставить DDL для таблицы? Наконец, я предполагаю, что он не работает из-за плохой производительности - возникает ли ошибка или какая-либо другая обратная связь? –

+0

Похоже, что вам нужно применить фильтр для запроса данных из Access (я ржавлю на то, что можно сделать динамически с запросом данных из Access to MySQL). –