ORA-00900 при удалении заявления

Я пытаюсь использовать DELETE FROM с IN предложение и подзапрос, чтобы удалить строки, заданные запросом в другой таблице, являющейся 1-к-1 с таблицей, из которой я удаляю, но Oracle 11g2 исключает совершенно бесполезную ошибку ORA-00900, как в следующей скрипте SQL:

http://sqlfiddle.com/

Для тех, кто не может получить доступ к SQLfiddle, используется схема / начальная загрузка (я использую varchar вместо varchar2 для переносимости теста используются "дикие" данные varchar2 вместо):

create table obj (id integer primary key, data varchar(100));
create table meta(id integer primary key, imported char(1));

insert into obj (id, data) values (1, 'foo');
insert into obj (id, data) values (2, 'bar');
insert into obj (id, data) values (3, 'baz');
insert into obj (id, data) values (4, 'blurf');
insert into obj (id, data) values (5, 'hurf');
insert into meta (id, imported) values (1, 'T');
insert into meta (id, imported) values (2, 'F');
insert into meta (id, imported) values (3, 'T');
insert into meta (id, imported) values (4, 'F');
insert into meta (id, imported) values (5, 'F');

и заявления, которые я пытаюсь выполнить:

delete from obj where obj.id in (select meta.id from meta where meta.imported = 'F');
select * from obj full outer join meta on obj.id = meta.id;

(The select ... full outer join запускается сам по себе, и ошибка все равно возникает, если я все равно закомментирую ее, поэтому это не источник ORA-00900.)

PS Это утверждение также допустимо для SQL - ни SQL Server 2014, ни PostgreSQL 9.3 не имеют проблем с скрипкой, и он работает и в локальной копии SQLite 3.8.8.3, как только full outer join переключается на inner join,

2 ответа

Решение

Это действительно проблема в SQLFiddle - ORA-00900 не возникает, когда я запускаю эту форму оператора удаления для фактической базы данных, с которой я работаю.

Почему страница "о" не документирует это более четко, я не знаю...

Может быть, вам нужно левое объединение в объединение с левым объединением путем обращения таблицы и принятия только нулевых значений

select * from obj left join meta on obj.id = meta.id 
union all
select * from meta left join obj  on obj.id = meta.id 
where obj.id is null 
Другие вопросы по тегам