2017-08-01 104 views
0

我新的SQL,我一直在想,如果有一个有效的方式来获得满足一个条件,无论是在一个数据的数据的数量SQL命令。SQL:Access数据库一次,并获取数据的数据数量和

具体来说,我想要实现的是:

  1. 检查是否存在于表中的任何记录满足用户输入的条件
  2. 如果是的话,显示数据。否则,显示“找不到数据”。

它就这么简单,但以我目前的SQL知识,我只能想到一种方法来实现这一点,它甚至需要2个SQL命令,我并不高兴。我所想的是:

/*First, count the number of data satisfying the condition. 
    If this returns 0, show "No data found" */ 
SELECT COUNT(*) FROM Table WHERE Condition = "XXX" 

/*If the first SQL command returns 1 or greater, retrieve all data 
    and show them */ 
SELECT * FROM Table WHERE Condition = "XXX" 

然而,这两个SQL命令几乎相同,唯一的区别是,有COUNT()为第一位的,这两次访问表。 这能简化任何进一步的,所以我可以实现我想要实现与可能的一个SQL命令是什么?或者有没有其他方法可以更高效地实现这一目标?谢谢。

编辑: 谢谢大家。为了您的信息,我正在编写一个访问数据库的C#程序。我已经使用COUNT(*)的地方,我是能够通过检索数据计数:

string str = "SELECT COUNT(*) FROM Table WHERE condition = 'XXX'"; 
com = new OleDbCommand(str, connection); 
int count = (int)com.ExecuteScalar(); 
return count; 

但如果一个SQL命令返回两个计数和数据,我怎么能检索数据到一个变量?

+0

您正在使用的数据库? –

+0

使用分页时,这可能是必需的。 –

+0

@TimBiegeleisen我正在使用SQL Server – JessicaD

回答

1

如果你想要得到的计数为它选择给予一定条件的所有列相同的查询,那么你可以考虑使用COUNT()作为一个分析函数应用于整个表格。

SELECT t.*, 
    COUNT(*) OVER() cnt 
FROM Table t 
WHERE Condition = "XXX" 

Demo

0

SELECT COUNT(*),* FROM表WHERE条件=“XXX”

0

如果您正在运行使用游标类客户端的SQL,光标可以提供一个rowcount属性标识受影响的行数。如果是这样,那么您可以简单地运行SELECT * FROM Table WHERE Condition = 'XXX';并获取从光标中选择的数字或行。

0

我不明白你为什么会需要COUNT(*)可言,但也许还有更多尚未提供的要求是什么?

如果SELECT *结果集为空,则没有记录,您可以显示一条消息,该效果。如果结果集不为空,则可以处理并显示数据。