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对这块做了什么修改,不是很清楚。如果在后面的工作中找到答案再做记录。