Sql 将不存在转换为不存在

Sql 将不存在转换为不存在,sql,oracle,Sql,Oracle,我想将此查询从不在转换为不存在 select id, name, cat from posts where id not in (1, 100) 如何将其转换为不存在的您不需要转换此不存在将是合适的 您当前的查询很好。您不需要转换此不存在将是合适的 SELECT id, NAME, cat FROM posts p WHERE NOT EXISTS (SELECT 1 FROM (SELECT 1 AS co

我想将此查询从
不在
转换为
不存在

select id, name, cat from posts where id not in (1, 100)

如何将其转换为不存在的

您不需要转换此<如果您使用的是子查询,而不是硬编码的值列表,则代码>不存在将是合适的


您当前的查询很好。

您不需要转换此<如果您使用的是子查询,而不是硬编码的值列表,则代码>不存在将是合适的

SELECT id, 
       NAME, 
       cat 
FROM   posts p 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   (SELECT 1 AS col 
                           FROM   dual 
                           UNION 
                           SELECT 100 AS col 
                           FROM   dual) a 
                   WHERE  p.id = a.col); 
您当前的查询很好

SELECT id, 
       NAME, 
       cat 
FROM   posts p 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   (SELECT 1 AS col 
                           FROM   dual 
                           UNION 
                           SELECT 100 AS col 
                           FROM   dual) a 
                   WHERE  p.id = a.col); 
您当前的查询很好。但是如果您想使用NOT EXISTS进行查询,请尝试一下



您当前的查询很好。但是,如果您想使用“不存在”,请尝试一下。

只是好奇而已。。。你为什么要这么做?您当前的查询似乎还可以。当我在查询中使用NOT时需要9分钟。当我删除NOT时需要13秒。只是想看看是否不存在会产生不同的结果:确保
id
已被索引。奇怪的是,这样一个简单的
不在
中需要9分钟,但整个表扫描需要13秒。即使
id
没有被索引也不能解释这一点。您是否发布了完整的查询,或者是否还有其他内容?
解释计划
不在
中的查询说了什么?@Luke101-您如何测量这两个查询的运行时间?您是否正在查看获取第一行所需的时间?或者获取最后一行所需的时间?
id
是主键吗?或者是否存在大量id为1或100的
行?带和不带
WHERE
子句的查询计划是什么?只是好奇。。。你为什么要这么做?您当前的查询似乎还可以。当我在查询中使用NOT时需要9分钟。当我删除NOT时需要13秒。只是想看看是否不存在会产生不同的结果:确保
id
已被索引。奇怪的是,这样一个简单的
不在
中需要9分钟,但整个表扫描需要13秒。即使
id
没有被索引也不能解释这一点。您是否发布了完整的查询,或者是否还有其他内容?
解释计划
不在
中的查询说了什么?@Luke101-您如何测量这两个查询的运行时间?您是否正在查看获取第一行所需的时间?或者获取最后一行所需的时间?
id
是主键吗?或者是否存在大量id为1或100的
行?带和不带
WHERE
子句的查询计划是什么?这是如何相同的?你忽略了
100
,你没有别名
col
,所以这不符合甲骨文存在主义?;)哇..我是甲骨文的新手,第一次看到双表。在谷歌上查了一下,我今天学到了一些新东西!我尝试过这个查询,结果没有什么不同。但这很有趣。现在我知道我有很多关于甲骨文的东西要学。这是怎么回事?你忽略了
100
,你没有别名
col
,所以这不符合甲骨文存在主义?;)哇..我是甲骨文的新手,第一次看到双表。在谷歌上查了一下,我今天学到了一些新东西!我尝试过这个查询,结果没有什么不同。但这很有趣。现在我知道我有很多关于甲骨文的东西要学。