oracle 去掉 not null,oracle10.2.0.1上not in的一个小问题

create table AL

(

NODE_ID     VARCHAR2(128) not null,

PROPERTY_ID VARCHAR2(128) not null,

VALUE       NUMBER not null,

VINDEX      NUMBER not null

)

;

prompt Creating AN...

create table AN

(

PKID          VARCHAR2(128) not null,

DEFINITION_ID VARCHAR2(128),

PARENT_ID     VARCHAR2(128) not null,

NAME          VARCHAR2(128),

ORDERNO       NUMBER,

STRING_INDEX  VARCHAR2(1),

CLOB_INDEX    VARCHAR2(1)

)

;

insert into AN (PKID, DEFINITION_ID, PARENT_ID, NAME, ORDERNO, STRING_INDEX, CLOB_INDEX)

values ('2534175354408', null, '1000000000000', 'aaa_1_2_3_4_5.png', 42507, null, null);

出现问题的SQL1

select  * from an where pkid not in

(select node_id from al where property_id='length' and value is  null)

没有问题的SQL2

select  * from an where pkid not in

(select node_id from al)

很奇怪吧 :仔细看如果把al.value not null的约束去掉。那么SQL1和SQL2均正常。或者不去掉

SQL3

select * from an, al

where al.node_id(+) = an.pkid

and al.value(+) is null

and al.property_id(+) = 'length'

and al.node_id is null;

SQL4

select * from an left join al on an.pkid=al.node_id  and  al.property_id='length' and al.value is null

(以上2个SQL采用自网友的建议)这2个也可以出正确结果。

而且SQL1和SQL2在oracle 9i版本是没有问题的啊!所以问题就在于10.2.0.1对这块做了什么修改,不是很清楚。如果在后面的工作中找到答案再做记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值