Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Odpowiednik RowID Oracle w MySQL

W MySql zwykle używasz zmiennych sesji, aby osiągnąć tę funkcjonalność:

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

Ale nie możesz sortować tabeli, z której próbujesz usunąć w podzapytaniach.

UPD :oznacza to, że będziesz musiał utworzyć tabelę tymczasową, wstawić podzapytanie określające zakres do tabeli tymczasowej i usunąć z oryginalnej tabeli, łącząc się z tabelą tymczasową (potrzebny będzie unikalny identyfikator wiersza):

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

Ponieważ jest to jednorazowa operacja, nie powinno to powodować zbytniego obciążenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 najlepszych kursów online do nauki MySQL

  2. phpMyAdmin na MySQL 8.0

  3. Jak tworzyć i utrzymywać bazy danych MySQL w cPanel?

  4. Zapytanie MySQL, aby uzyskać nazwy kolumn?

  5. Składnia SQL UPDATE – wymieniona przez DBMS