озадачен условием «или» в оракуле? - PullRequest
0 голосов
/ 19 мая 2011

Это проблема, с которой я столкнулся в работе, и я упрощаю ее следующим образом: Во-первых, это тестовый набор

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 Ответ

4 голосов
/ 19 мая 2011

Мой набор результатов пуст!

Я использую

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:

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

Iзапустите его также в 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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...