我試圖從單個表中選擇一個列(沒有連接),我需要計數行數,理想情況下,我開始檢索行之前。我提出了兩種方法來提供我需要的信息。在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