Oracle の RowID に相当する MySQL
Oracle では、ROWID 列はテーブル内の各行を一意に識別します。 MySQL には同等のカラムはありますか?
次のクエリのように、主キーを課しながら重複レコードを削除するなどの操作を実行するときに、この疑問がよく発生します。
delete from my_table where rowid not in (select max(rowid) from my_table group by field1,field2)
MySQL ソリューション
Oracle とは異なり、MySQL には ROWID に直接相当するものがありません。代わりに、セッション変数を使用して一意の行識別子を生成できます:
SELECT @rowid:=@rowid+1 as rowid FROM table1, (SELECT @rowid:=0) as init ORDER BY sorter_field
ただし、この方法は、削除対象のテーブルで並べ替えるサブクエリでは使用できません。
代替アプローチ
重複レコードを削除して主キーを適用するには、一意のレコードを保存する一時テーブルを作成します。行識別子:
CREATE TEMPORARY TABLE duplicates ... INSERT INTO duplicates (rowid, field1, field2, some_row_uid) SELECT @rowid:=IF(@f1=field1 AND @f2=field2, @rowid+1, 0) as rowid, @f1:=field1 as field1, @f2:=field2 as field2, some_row_uid FROM testruns t, (SELECT @rowid:=NULL, @f1:=NULL, @f2:=NULL) as init ORDER BY field1, field2 DESC; DELETE FROM my_table USING my_table JOIN duplicates ON my_table.some_row_uid = duplicates.some_row_uid AND duplicates.rowid > 0
この方法では、一時テーブルを作成し、一意の行識別子を挿入し、結合を使用して元のテーブルから重複レコードを削除します。わずかなオーバーヘッドが追加されますが、1 回限りの操作では実行可能なソリューションです。
以上がMySQL には重複レコードを削除するための同等の ROWID がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。