员工表包含ID和NAME列。名称可以重复。我想知道是否至少有一行名称如'kaushik%'。
因此查询应该返回true / false或1/0。
是否可以使用单个查询找到它。 如果我们尝试像
那样的话select count(1) from employee where name like 'kaushik%'
在这种情况下,它不会返回true / false。 我们也在迭代表中的所有记录。在简单的SQL中是否存在这样的方式:每当获取满足条件的第一条记录时,它应该停止检查更多记录。 或者这样的事情只能在Pl / SQL块中处理?
编辑* 贾斯汀提供的第一种方法看起来正确答案
SELECT COUNT(*) FROM employee WHERE name like 'kaushik%' AND rownum = 1
答案 0 :(得分:35)
通常,你将其表达为
SELECT COUNT(*)
FROM employee
WHERE name like 'kaushik%'
AND rownum = 1
rownum = 1
谓词允许Oracle在找到第一个匹配行后立即停止查看
SELECT 1
FROM dual
WHERE EXISTS( SELECT 1
FROM employee
WHERE name like 'kaushik%' )
其中EXISTS
子句允许Oracle在找到第一个匹配行后立即停止查看。
第一种方法更紧凑但是,在我看来,第二种方法更清晰,因为你真的想确定一个特定的行是否存在而不是试图计算某些东西。但第一种方法也很容易理解。
答案 1 :(得分:5)
怎么样:
select max(case when name like 'kraushik%' then 1 else 0 end)
from employee
或者,由于like
可以使用索引,因此可能更有效:
select count(x)
from (select 1 as x
from employee
where name like 'kraushik%'
) t
where rownum = 1
答案 2 :(得分:3)
因为你要求sql查询应该返回1或0,那么你可以尝试以下查询: -
select count(1) from dual
where exists(SELECT 1
FROM employee
WHERE name like 'kaushik%')
由于上述查询使用Exists,因此它将扫描employee表,一旦遇到名称与“kaushik”匹配的第一条记录,它将返回1(不扫描表的其余部分)。如果没有记录匹配,则返回0。
答案 3 :(得分:1)
select 1
where exists ( select name
from employee
where name like 'kaushik%'
)