ORACLE - 理解 NOT EXISTS 运算符的问题

ORACLE - Problem understanding NOT EXISTS operator

我 运行 编写了一段简单的代码,但从那以后我就一直在绞尽脑汁。

这要么违反直觉,要么我遗漏了一些简单的或基本的东西。不知道。

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
);

排除所有其他条件,基本版本的功能类似于上面的代码。

子查询 return 包含 SomeDate = 14/11/19 的所有行,因为这些行大于第 5 行但严格小于第 28 行。

当行 returned 时,Not Exists 的计算结果应为 false。

所以按照我的逻辑,这意味着排除所有带有 14/11/19 的行,上面的代码应该 return 28/11/19.

但它 return 是“14/11/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 匹配此日期。

我怀疑你对子查询中的不等式感到困惑。