检查数据库中对象是否存在的更好方法是什么?
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有效。
答案 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