Employee表具有ID和NAME列.名称可以重复.我想知道是否至少有一行名称如'kaushik%'.
因此查询应该返回true/false或1/0.
是否可以使用单个查询找到它.如果我们尝试类似的东西
select count(1) from employee where name like 'kaushik%'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它不会返回true/false.我们也在迭代表中的所有记录.在简单的SQL中是否存在这样的方式:每当获取满足条件的第一条记录时,它应该停止检查更多记录.或者这样的事情只能在Pl/SQL块中处理?
编辑* 贾斯汀提供的第一种方法看起来正确答案
SELECT COUNT(*) FROM employee WHERE name like 'kaushik%' AND rownum = 1
Run Code Online (Sandbox Code Playgroud)
Jus*_*ave 36
通常,你也可以表达这一点
SELECT COUNT(*)
FROM employee
WHERE name like 'kaushik%'
AND rownum = 1
Run Code Online (Sandbox Code Playgroud)
其中rownum = 1
谓词允许Oracle,就立即停止寻找,因为它找到的第一个匹配行或
SELECT 1
FROM dual
WHERE EXISTS( SELECT 1
FROM employee
WHERE name like 'kaushik%' )
Run Code Online (Sandbox Code Playgroud)
该EXISTS
子句允许Oracle在找到第一个匹配行后立即停止查看.
第一种方法稍微紧凑,但在我看来,第二种方法更清晰,因为你真的想确定一个特定的行是否存在而不是试图计算某些东西.但第一种方法也很容易理解.
怎么样:
select max(case when name like 'kraushik%' then 1 else 0 end)
from employee
Run Code Online (Sandbox Code Playgroud)
或者,因为like
可以使用索引可能更有效:
select count(x)
from (select 1 as x
from employee
where name like 'kraushik%'
) t
where rownum = 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
74424 次 |
最近记录: |