2012-05-04 13 views
14

を特定の行を選択します。理想的には私が</p> <pre><code>select * from customer where row_number() = 3 </code></pre> <p>と同等ですが、それは違法だクエリーを必要とするMySQLのテーブルから

自動増分フィールドは使用できません。

row_number()は、選択が必要な行です。

どうすればよいですか?

EDIT:まあ、iSql * plusを使って練習していますが、何らかの理由でlimitとauto_incrementを使うのは不正です。私はシーケンスとトリガーを作成して終了し、エントリがあるたびにidを1ずつ上げました。

+2

あなたはROW_NUMBER() ''とはどういう意味ですか?レコードはMySQLで注文されません。コンテンツに基づいて、希望するデータを他の方法で識別する必要があります。 – eggyal

+1

@eggyal:標準のANSI SQLには 'row_number()'関数がありますが(Marlonの使い方は間違いですが)MySQLはそれをサポートしていません(他の多くの最新のSQL機能と同じように) –

答えて

42

を選択することができます。

documentationが説明するように、最初の引数は返される最初の行のオフセットを指定し、2番目の引数は返す最大行数をに指定します。

これは0ベースのインデックスであることに注意してください。したがって、行番号nを使用する場合、最初の引数はn-1である必要があります。 2行目の引数は常に1行しか必要ないので、になります。たとえば、あなたが行番号テーブルcustomerのたい場合:

SELECT * FROM customer LIMIT 55,1 
+0

私に例を挙げてもらえますか? –

+0

何LIMITこの問題に関係があるのでしょうか? – Starx

+0

@Starxもし@MarlonBrandoは 'LIMIT'が解決され、技術的なIDについてではない、彼の結果は、単に三行を望んでいます。 – sp00m

3

あなたが代わりにWHERE row_number() = 3LIMIT 2,1を使用することができ、自動でテーブル内のidフィールドを生成追加し、このIDによって

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3; 
5

をあなたはそのような行を選択することはできません。あなたが状況と比較されているフィールドがある場合はここで

3は、動作するクエリですがなるその値フィールドを指定する必要がid

select * from customer where `id` = 3 
1

あなたのテーブルを使用して作成する必要があります理想的にAUTO_INCREMENT属性を持つユニークなIDフィールド。例:次に、あなたがこの表の第3レコードにアクセスすることができます

CREATE TABLE Persons 
(
P_Id int NOT NULL AUTO_INCREMENT, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
PRIMARY KEY (P_Id) 
) 

SELECT * FROM Persons WHERE P_Id = 3 
4
SET @customerID=0; 
SELECT @customerID:[email protected]+1 AS customerID 
FROM CUSTOMER ; 

あなたはこのようにSQLからデータセットを取得し、Javaデータ構造にそれを取り込むことができます(のようなリスト)を作成し、そこに必要な並べ替えを行います。それは潜在的に毎回異なる行を返すことができますように、SQLテーブルがデフォルトで注文、および行の順序セット以外からn行を求めていない

1

(多分同等のインターフェースの助けを借りて)意味がありませんORDER BYを指定しない限り:

select * from customer order by id where row_number() = 3 

(時にはMySQLテーブルが内部的な順序で表示されますが、この動作に依存することはできません)。そして、あなたが、LIMIT offset, row_countを使用することができますので、数3は2をオフセットとなり、行オフセット0ベース:

select * from customer order by id 
limit 2, 1 

か、LIMIT row_count OFFSET offsetを使用することができます。

select * from customer order by id 
limit 1 offset 2 
関連する問題

 関連する問題