Я хочу выбрать несколько строк на основе определенных критериев, а затем взять одну запись из этого набора и 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
работало бы, если бы у меня не было нескольких ключей, но я не понимаю, как я могу использовать его с моими данными. Итак, какая альтернатива?