SQL中的COUNT与SELECT

时间:2018-04-10 09:09:21

标签: sql performance

检查数据库中对象是否存在的更好方法是什么?

select count(id) as count from my_table where name="searchedName";

select id from my_table where name="searchedName";

然后检查count > 0或对象是否为空(ORM逻辑)

修改

select id对Oracle有效。

3 个答案:

答案 0 :(得分:2)

我们的想法应该是我们只需找到一个记录就可以说这样的记录存在。这可以使用标准SQL中的EXISTS子句来完成。

select exists (select * from mytable where name = 'searchedName');
如果表包含带有' searchingName'的记录,则

返回true。否则就是假的。

如果你想要0表示false而1表示true(例如,如果DBMS不支持布尔值):

select case when exists (select * from mytable where name = 'searchedName') 
  then 1 else 0 end as does_exist;

你说你想要这个用于Oracle。在Oracle中,您可以使用上述查询,但您必须从表dual中进行选择:

select case when exists (select * from mytable where name = 'searchedName') 
  then 1 else 0 end as does_exist
from dual;

但对于Oracle,我们通常使用rownum代替:

select count(*) as does_exist
from mytable 
where name = 'searchedName'
and rownum = 1; -- to find one record suffices and we'd stop then

如果表中包含带有' searchingName'的记录,则此参数也会返回1。否则为0。这是Oracle中限制查找的一种非常典型的方式,查询非常易读(在我看来)。

答案 1 :(得分:1)

我打电话:

select id from my_table where name='searchedName';

确保name列有索引。 然后检查结果是否为空。

答案 2 :(得分:0)

尝试使用IF EXISTS(

if exists (select 1 from my_table where name = "searchedName")
begin
     ....
end