首页 > 解决方案 > Oracle SQL 快速检索否定条件

问题描述

不确定我是否正确地问了这个问题

我有一张有 2K 条记录的表。每条记录代表一个巨大的批处理单元,它的初始状态为 0(零)。每次批次完成时,该批次记录的状态都会更新=10。这将该行/批次标记为已完成

查看所有记录的状态是否为 10 的最快方法是什么。查询可以返回 true 或 false 或在遇到第一个 0(零)时立即计数。只有在最坏的情况下,它必须遍历整个表并返回。

标签: sqloracle

解决方案


我会做这样的事情:

select null as col
from   your_table
where  status = 0  AND ROWNUM = 1
;

(或者select你想要的第一行遇到的任何内容status = 0;按照我编写查询的方式,它只会告诉你是否有不完整的批次,但不会告诉你其他任何事情。)

ROWNUM一旦遇到第一个条件,条件就会强制执行停止-status = 0无论是从表本身,还是从索引status(如果您在列上有索引)(如果这种查询在您的业务中很常见)。

该查询将返回单行 -NULL在唯一的列col中,除非您选择从记录中选择某些内容 - 或者如果所有批次都已完成,则不返回任何行。


推荐阅读