这是我在工作中遇到的问题,我将其简化如下: 首先,是测试用例
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
,但是为什么不起作用?
答案 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 ROWSSELECT *
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>