ОРАКУЛ - проблема понимания НЕ СУЩЕСТВУЕТ оператора - PullRequest
0 голосов
/ 06 ноября 2019

Я столкнулся с простым кусочком кода, но с тех пор я ломал голову.

Это либо нелогично, либо я что-то упускаю, простое или фундаментальное. Понятия не имею.

WITH T1 AS 
(
SELECT TO_DATE ('14/11/19', 'DD/MM/YY') as SomeDate FROM DUAL
UNION
SELECT TO_DATE ('28/11/19', 'DD/MM/YY') as SomeDate FROM DUAL
),
T2 AS
(
SELECT TO_DATE ('14/11/19', 'DD/MM/YY') as SomeDate FROM DUAL
UNION
SELECT TO_DATE ('28/11/19', 'DD/MM/YY') as SomeDate FROM DUAL
)
SELECT * FROM T1 WHERE T1.SomeDate >= TO_DATE ('05/11/19','DD/MM/YY')
AND NOT EXISTS
(SELECT 1 FROM T2
WHERE T2.SomeDate >= TO_DATE ('05/11/19','DD/MM/YY')
AND T2.Somedate < T1.Somedate
);

За исключением всех других условий, базовая версия делает что-то вроде приведенного выше кода.

Подзапрос возвращает все строки, где SomeDate = 14/11/19, так как они являютсяте, которые больше 5-го, но строго ниже 28-го.

И не существует, должны возвращать значение false, когда строки возвращаются.

Итак, по моей логике это означает, что исключение всех строк с14/11/19, приведенный выше код должен вернуть 28/11/19.

Но он возвращает '14 / 11/2019 '. * 10101 *

Может кто-нибудь объяснить, что я пропустил?

Большое спасибо.

1 Ответ

1 голос
/ 06 ноября 2019

Я бы написал такой запрос, чтобы мне было легче его прочитать:

WITH T1 AS  (
      SELECT DATE '2019-11-14' as SomeDate FROM DUAL UNION ALL
      SELECT DATE '2019-11-28' as SomeDate FROM DUAL
    ),
    T2 AS (
     SELECT DATE '2019-11-14' as SomeDate FROM DUAL UNION ALL
     SELECT DATE '2019-11-28' as SomeDate FROM DUAL
    )
SELECT *
FROM T1
WHERE T1.SomeDate >= DATE '2019-11-05' AND
      NOT EXISTS (SELECT 1
                  FROM T2
                  WHERE T2.SomeDate >= DATE '2019-11-05'  AND
                        T2.Somedate < T1.Somedate
                 );

Я не уверен, в чем ваше замешательство. Есть две возможности для T1.SomeDate, 2019-11-14 и 2019-11-18.

Только в более ранней дате (2019-11-14) нет строк в T2, которые меньше, чемсвидание. Следовательно, NOT EXISTS соответствует этой дате.

Я подозреваю, что вас смущает неравенство в подзапросе.

...