0

我正在使用 Select 1 from dual 语句来查看进入我的系统的新数据是否真的是新的,如果是新的,那么它将被插入,如果不是,那么它将在数据库中更新。

sql.CommandText = "select 1 from dual where exists (select * from my table where hour = " + hour + " and zone = '" + zone+ "' and date = TO_DATE('" + mydate + "','DD-MM-YY'))"

然而问题是,在运行语句后,即使不满足条件,即使表完全为空,它也会返回 1 值。这怎么可能发生?我正在使用 VB、.NET 框架 3.5 和 Oracle 10g。

4

2 回答 2

2

我会建议像

SELECT COUNT(*) AS cnt 
  FROM mytable m
 WHERE m.hour = hour 
   AND m.zone = zone
   AND m.date = TO_DATE( mydate,'DD-MM-YY'))
   AND ROWNUM = 1

结果将是 0 或 1。由于您只关心行的存在,因此ROWNUM = 1将导致查询在找到匹配条目后立即退出,并阻止您扫描整个表。

于 2012-09-28T23:39:33.480 回答
0

您可以使用sign(count(1))来获取计数。

select sign(count(1)) cnt 
from my_table 
where hour = " + hour + " and zone = '" + zone+ "' 
    and date = TO_DATE('" + mydate + "','DD-MM-YY'))" 
于 2012-09-28T22:20:27.137 回答