疑惑在oracle中的“Or”条件中?

时间:2011-05-19 15:30:54

标签: sql oracle

这是我在工作中遇到的问题,我将其简化如下: 首先,是测试用例

create table A_TESTB
(
  A VARCHAR2(10),
  B VARCHAR2(10)
);

insert into A_TESTB (A, B)
values ('1', '2');
insert into A_TESTB (A, B)
values ('1', '3');
insert into A_TESTB (A, B)
values ('1', '4');
commit;

SQL> select * from a_testb;

A          B
---------- ----------
1          2
1          3
1          4

然后,我使用如下的SQL

SQL> SELECT *
  2    FROM (SELECT '10' TESTTYPE, T.* FROM A_TESTB T) W
  3   WHERE (W.A = '1' OR 1 = 2)
  4     AND W.TESTTYPE = '999999';

TESTTYPE A          B
-------- ---------- ----------
10       1          2
10       1          3
10       1          4

问题是:我已经使用条件AND W.TESTTYPE = '999999'进行过滤,并且我期望的结果集应该为空,但似乎条件不起作用,秘密可能来自OR,但是为什么不起作用?

1 个答案:

答案 0 :(得分:4)

我的结果集是空的!

我正在使用

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0  Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

使用TOAD版本10.5.0.41

为您的查询返回NO ROWS
SELECT *
  FROM (SELECT '10' TESTTYPE, T.*
          FROM A_TESTB T) W
 WHERE (W.A = '1' OR 1 = 2) AND W.TESTTYPE = '999999';

我也在SQL * Plus中运行它,只是为了100%确定:

SQL> SELECT *
  2    FROM (SELECT '10' TESTTYPE, T.* FROM A_TESTB T) W
  3   WHERE (W.A = '1' OR 1 = 2)
  4      AND W.TESTTYPE = '999999';

No rows selected.

SQL>