Как я могу выбрать соседние строки в произвольной строке (в sql или postgresql)?

Я хочу выбрать несколько строк на основе определенных критериев, а затем взять одну запись из этого набора и 5 строк перед ним и после него.

Теперь я могу сделать это численно, если в таблице есть первичный ключ (например, первичные ключи, которые численно на 5 меньше ключа целевой строки и на 5 больше ключа целевой строки).

Итак, выберите строка с первичным ключом 7 и соседние строки:

select primary_key from table where primary_key > (7-5) order by primary_key limit 11;

2
3
4
5
6
-=7=-
8
9
10
11
12

Но если я выберу только определенные строки для начала, из гр покинул присоединиться к my_data на grp.id1 = my_data.id1 и grp.id2 = my_data.id2 и grp.id3 = my_data.id3 и grp.id4 = my_data ....

У меня есть следующий код, который отлично работает в MS SQL Server:

delete grp
from grp
left join my_data
on grp.id1 = my_data.id1
and grp.id2 = my_data.id2
and grp.id3 = my_data.id3
and grp.id4 = my_data.id4
where my_data.id1 is NULL

По сути, я хочу удалить все вхождения, которые можно найти в grp и не имеют эквивалента в my_data . К сожалению, в Oracle 10g это не работает. Я пробовал использовать старый синтаксис для соединения слева (+), но он тоже не работает. Примерно так:

delete grp
from grp,
my_data
where grp.id1 = my_data.id1 (+)
and grp.id2 = my_data.id2 (+)
and grp.id3 = my_data.id3 (+)
and grp.id4 = my_data.id4 (+)
and my_data.id1 is NULL

Предложение IN работало бы, если бы у меня не было нескольких ключей, но я не понимаю, как я могу использовать его с моими данными. Итак, какая альтернатива?

15
задан Simon T. 8 September 2010 в 22:11
поделиться