2011-11-12 17 views
3

私は14のエントリを持つテーブル 'Labs'を持っています。MySQL - COUNTとLIMIT関数を一緒に使用する

クエリSELECT COUNT(Labs.sid) FROM Labs LIMIT 0, 18446744073709551615は "14"を返します。

しかし、クエリSELECT COUNT(Labs.sid) FROM Labs LIMIT 1, 18446744073709551615は "0"(私が期待するように13ではない)を返します。実際には、LIMITローオフセット値2、3、4などを設定すると "0"が返されます。

なぜですか? mysqlを使って指定されたオフセットの後に行の数を決定する方法はありますか?

FWIW MySQL 5.5.9とInnoDBデータベースエンジンを使用しています。

答えて

4

カウントが実行された後に制限が適用されます。

代わりにこれを試してみてください:

SELECT COUNT(sid) FROM 
(
    SELECT sid FROM Labs LIMIT 2, 18446744073709551615 
) T1 

注あなたは順序が大きく異なる行が理論的には、それぞれを選択することができ一貫であることを保証することはできませんので、ORDER BYなしでLIMITを使用することは悪い考えであること時間(sidがNULLの場合は問題)

+0

ありがとうございました! –

2

COUNT(*)からオフセットを減算してみませんか?

SELECT COUNT(Labs.sid) - 1 FROM ... 
+0

あなたが本当に賢い人になりたいのであれば、これがあなたに否定的な結果を与えるかどうかをチェックすることができ、その場合は代わりに0を返します。 – Hammerite

+0

これは、 'Labs.sid'がNULLの場合、異なる結果をもたらします。 –

関連する問題