我试图使用带有一个DELETE FROM子句和一个子查询的IN子句来删除另一个表上的查询给出的行,该表与我要删除的表是1比-1,但是Oracle11g2barfs对我来说是一个完全没有帮助的ORA-00900错误,如下所示:
http://sqlfiddle.com/#!4/93171/1
对于那些无法获得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;( select ... full outer join自己运行,如果我仍然注释掉它,错误仍然会发生,所以它不是ORA-00900的来源。)
P.S.这个语句也是有效的SQL --无论是Server 2014还是PostgreSQL 9.3都没有小提琴问题,而且它在SQLite 3.8.8.3的本地副本中工作,一旦full outer join切换到inner join中也是如此。
发布于 2015-03-27 14:24:03
这确实是SQLFiddle中的一个问题--当我针对实际使用的数据库运行这种形式的delete语句时,ORA-00900不会发生。
为什么“关于”一页没有更清楚的记录,我不知道.
发布于 2015-03-25 22:13:02
也许您需要一个左连接与左连接,方法是倒转表,只取空值。
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 https://stackoverflow.com/questions/29266618
复制相似问题