Mysql
 sql >> база данни >  >> RDS >> Mysql

Еквивалент на RowID на Oracle в MySQL

В MySql обикновено използвате променливи на сесията, за да постигнете функционалността:

SELECT @rowid:[email protected]+1 as rowid
FROM table1, (SELECT @rowid:=0) as init
ORDER BY sorter_field

Но не можете да правите сортиране на таблицата, от която се опитвате да изтриете, в подзаявки.

UPD :това означава, че ще трябва да създадете временна таблица, да вмъкнете подзаявката за диапазон във временната таблица и да изтриете от оригиналната таблица, като се присъедините към временната таблица (ще ви е необходим уникален идентификатор на ред):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1064 грешка в CREATE TABLE ... TYPE=MYISAM

  2. Групирайте само по дата в колона Datetime

  3. Загубена връзка с MySQL сървър при 'четене на първоначален комуникационен пакет', системна грешка:0

  4. Как да използвам изявление CASE в MySQL

  5. Използване на MySQLi от друг клас в PHP