43

理想的には、と同等のクエリが必要です

select * from customer where row_number() = 3

しかし、それは違法です。

自動インクリメントフィールドを使用できません。

row_number()は、選択する必要のある行です。

どうすればこれを行うことができますか?

編集:まあ、私は練習にiSql * plusを使用していますが、limitとauto_incrementを使用することは何らかの理由で違法です。最終的にシーケンスとトリガーを作成し、エントリがあるたびにIDを1ずつ増やしました。

4

6 に答える 6

98

LIMIT 2,1の代わりに使用できますWHERE row_number() = 3

ドキュメントで説明されているように、最初の引数は返される最初の行のオフセットを指定し、2番目の引数は返される行の最大数を指定します

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

SELECT * FROM customer LIMIT 55,1
于 2012-05-04T23:47:19.430 に答える
8

そのような行を選択することはできません。値が3になるフィールドを指定する必要があります

比較しているフィールドが次の場合に機能するクエリは次のとおりです。id

select * from customer where `id` = 3
于 2012-05-04T23:48:17.077 に答える
6
SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;

このようにSQLからデータセットを取得し、それをJavaデータ構造(リストなど)に入力してから、そこで必要な並べ替えを行うことができます。(おそらく同等のインターフェースの助けを借りて)

于 2012-05-04T23:54:22.767 に答える
2

SQLテーブルはデフォルトでは順序付けされておらず、順序付けされていない行のセットからn番目の行を要求しても、ORDER BYを指定しない限り、毎回異なる行が返される可能性があるため、意味がありません。

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

(MySQLテーブルが内部順序で表示される場合がありますが、この動作に依存することはできません)。次に、0から始まるオフセットで、を使用できるためLIMIT offset, row_count、行番号3はオフセット2になります。

select * from customer order by id
limit 2, 1

または使用できますLIMIT row_count OFFSET offset

select * from customer order by id
limit 1 offset 2
于 2017-06-22T05:00:39.017 に答える
1

テーブルに自動生成されたIDフィールドを追加し、このIDで選択できます

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;
于 2012-05-04T23:45:49.790 に答える
1

テーブルは、理想的にはAUTO_INCREMENT属性を持つ一意のIDフィールドを使用して作成する必要があります。例:

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

次に、次のコマンドを使用して、このテーブルの3番目のレコードにアクセスできます。

SELECT * FROM Persons WHERE P_Id = 3
于 2012-05-04T23:53:25.697 に答える