首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00900关于删除语句

ORA-00900关于删除语句
EN

Stack Overflow用户
提问于 2015-03-25 21:12:20
回答 2查看 795关注 0票数 0

我试图使用带有一个DELETE FROM子句和一个子查询的IN子句来删除另一个表上的查询给出的行,该表与我要删除的表是1比-1,但是Oracle11g2barfs对我来说是一个完全没有帮助的ORA-00900错误,如下所示:

http://sqlfiddle.com/#!4/93171/1

对于那些无法获得SQLfiddle的人,我使用的模式/初始负载是(为了测试可移植性,我使用的是varchar而不是varchar2,而“野生”数据则使用varchar2 ):

代码语言:javascript
复制
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');

我想要做的陈述是:

代码语言:javascript
复制
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中也是如此。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-27 14:24:03

这确实是SQLFiddle中的一个问题--当我针对实际使用的数据库运行这种形式的delete语句时,ORA-00900不会发生。

为什么“关于”一页没有更清楚的记录,我不知道.

票数 0
EN

Stack Overflow用户

发布于 2015-03-25 22:13:02

也许您需要一个左连接与左连接,方法是倒转表,只取空值。

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29266618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档