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