如何使用Oracle中的Select Exists?

The*_*ght 8 sql oracle

什么是下面的等效SQL QueryOracle

SELECT CAST(
   CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1 
   ELSE 0 
   END 
AS BIT)
Run Code Online (Sandbox Code Playgroud)

我只想要一个使用存在的oracle查询,它像上面一样返回0或1.

Flo*_*ita 13

相当于:

select count(*) 
from dual 
where exists (SELECT * FROM theTable where theColumn like 'theValue%')
Run Code Online (Sandbox Code Playgroud)

  • 我被告知使用count(1)并存在(选择1 ...)以提高性能,但我从未检查是否有任何实际的imrpovement.但听起来很合乎逻辑. (3认同)

ype*_*eᵀᴹ 7

这将显示相​​同的输出.刚删除CAST并添加了一个,FROM dual因为Oracle不允许使用SELECT和不使用查询FROM:

SELECT 
   CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') 
     THEN 1 
     ELSE 0 
   END 
FROM dual ;
Run Code Online (Sandbox Code Playgroud)

SQL-Fiddle测试


Vin*_*rat 5

你可以这样写:

SELECT COUNT(*) FROM theTable WHERE theColumn LIKE 'theValue%' AND ROWNUM = 1
Run Code Online (Sandbox Code Playgroud)

这将返回0-1并且优化器得知查询将针对第一行访问进行优化。

  • @techdo:这在 PLSQL 中不起作用,因为您不能在 PL 中使用带有 `IF` 的 `SELECT`。但是,这将适用于任何允许使用 `SELECT` 的地方,特别是在 `SELECT` 子句中或在 `CASE` 语句中(`CASE WHEN (SELECT count(*) ...) > 0 THEN ... ELSE .. .结束`)。 (2认同)