【发布时间】:2019-12-11 08:59:40
【问题描述】:
给定以下 SQL 语句:
select
OBJECT_ID
FROM HPSFWY.RVERSIONING_1703 A
WHERE A.STAMP_ID >1
AND A.OBJECT_REV NOT IN (
select MAX(OBJECT_REV)
from HPSFWY.RVERSIONING_1709763 B
where B.COMMITID <= 6066
and B.OBJECT_ID = A.OBJECT_ID
)
在此查询中,where 子句 AND OBJECT_REV NOT IN 必须从 NOT IN 更改为等效的 EXISTS 语句。
我们试试这个
select
OBJECT_ID
FROM HPSFWY.RVERSIONING_1703 A
WHERE A.STAMP_ID >1
AND exists (
select *
from HPSFWY.RVERSIONING_1709763 B
where B.COMMITID <= 6066
and B.OBJECT_ID = A.OBJECT_ID
and B.OBJECT_REV > A.OBJECT_REV) ;
它给了我们接近的结果,但不一样
【问题讨论】:
-
请展示您的尝试:试错是一种比简单地要求别人为您完成工作更好的学习方式。
-
用它们所属的表别名来限定列名。
-
相当于
NOT IN将是NOT EXISTS重写它以使用EXISTS将是一个完全不同的查询 -
不是您问题的答案,但
A.OBJECT_REV NOT IN (SELECT MAX(...似乎很奇怪,因为后者返回一条记录。你可以考虑A.OBJECT_REV <> (SELECT MAX(...
标签: sql where-clause query-performance exists