ユーザー変数を使用すると、row_number関数をシミュレートできます。
各ユーザーに割り当てられている番号は、クエリが実行されるたびに変わる可能性があることに注意してください。 nameの代わりにdateRegisteredで注文すると、新しいレコードを追加したり、新しいレコードを追加したり、1つを削除したり、dateRegisteredを過去の時間に変更したりする挿入、更新、削除が発生した場合、この番号を変更できます。あなたは永久的なIDが必要な場合は今
SELECT A.*, @rn := @rn+1 as Row
FROM aTable A
CROSS JOIN (Select @rn :=0) B
ORDER BY Name
Working SQL fiddle
... したい場合は、あなたの日付フィールドに順を変更するには、更新を変えるようにしてくださいIDの順に入れなければこのような方法で生成されたPK(代理キー)はレコードを一意に識別する以外の意味を持ちません。
create table atable (
name varchar(10),
age int);
Insert into atable values
('Joe',30),
('Henry',24),
('Rick',55),
('Tom',19);
ALTER table atable add column ID int;
Update atable
INNER JOIN (
SELECT A.*, @rn := @rn+1 as Row
FROM aTable A
CROSS JOIN (Select @rn :=0) B
ORDER BY Name) B
on atable.Name = B.Name
and atable.Age = B.Age
set atable.id = B.Row;
ALTER TABLE atable MODIFY ID int NOT NULL primary key AUTO_INCREMENT;
Working fiddle
順序テーブルの構成要素ではありません。時間をかけて実行すると、Tomは1回の実行で5回、別の回で3回、10回後に実行されます。ユーザー変数を使用して実行される各クエリの行番号をシステムに生成させることができます。前述のように、注文は保証されていないので、行#は時間とともに変化する可能性があります。 'SELECT A. *、@rn:= @ rn + 1をTableNameからの行にするクロス結合(Select @rn:= 0)B順に名前を付ける ' – xQbert
@xQbertそれを行う方法は分かりますか? –
行は順序付けられていないセットを表します。だから、「行番号」というものはありません。それで、5列目のトムはどの意味でですか? – Strawberry