我试图从单个表中选择一个列(没有连接),我需要计数行数,理想情况下,我开始检索行之前。我提出了两种方法来提供我需要的信息。在SELECT语句之后需要行计数:什么是最佳SQL方法?
方法1:
SELECT COUNT(my_table.my_col) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
然后
SELECT my_table.my_col
FROM my_table
WHERE my_table.foo = 'bar'
或者方法2
SELECT my_table.my_col, (SELECT COUNT (my_table.my_col)
FROM my_table
WHERE my_table.foo = 'bar') AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
我这样做,因为我的SQL驱动程序(SQL本机客户端9.0)不允许我在SELECT语句中使用SQLRowCount,但我需要知道结果中的行数,才能在将信息分配给它之前分配数组。不幸的是,在我的程序的这个区域中不能使用动态分配的容器。
我关注的是以下情形可能会发生:
- SELECT COUNT位发生
- 会出现另一种指令,增加或出现数据和突然数组是错误的移除一行
- SELECT尺寸。
- 在最坏的情况下,这将尝试写入超出数组极限的数据并使我的程序崩溃。
方法2是否禁止此问题?
此外,两种方法之一会更快吗?如果是这样,哪个?
最后,有没有更好的方法,我应该考虑(也许是一种方式来指示司机用SQLROWCOUNT返回的行数在SELECT结果?)
对于那些问,我用母语C++与上述SQL驱动程序(由Microsoft提供)。
你对这些数据做了什么,你需要原始数据和行数?如果你需要所有的原始数据(这是你正在选择的),你不能在读它的时候把它计算在内吗?如果你不需要所有的原始数据,那么不要选择它。计数仅用于分页目的吗? – 2009-01-06 06:34:55