這是我在工作中遇到的問題,我把它簡化爲: 首先,測試用例在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
,但爲什麼它不工作?
如果你的和'WB ='99999''怎麼辦?我懷疑這個常量沒有得到正確的處理,而不是OR導致的問題,但是我沒有可用的oracle來做任何測試。 – 2011-05-19 15:36:58
如果我和是「W.B ='99999'」結果集爲空,但我需要 「W.TESTTYPE」而不是「W.B」 – stephen 2011-05-19 16:28:53
您可以發佈查詢的執行計劃,包括謂詞過濾器嗎? – 2011-05-19 17:25:14