sql >> Database teknologi >  >> RDS >> Mysql

Svarende til Oracles RowID i MySQL

I MySql bruger du normalt sessionsvariabler for at opnå funktionaliteten:

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

Men du kan ikke lave sorteringer på den tabel, du forsøger at slette fra i underforespørgsler.

UPD :det vil sige, at du bliver nødt til at oprette en midlertidig tabel, indsætte underforespørgslen for rækkevidde til den midlertidige tabel og slette fra den originale tabel ved at forbinde dig med den midlertidige tabel (du skal bruge en unik række-id):

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

Da det er engangsoperation, bør dette ikke medføre for meget overhead.



  1. Forespørgsel efter array-elementer inde i JSON-typen

  2. Problemet med vinduesfunktioner og visninger

  3. SQL Developer 4.0 udgivet

  4. Hvorfor gik min MySQL-database ned? Få indsigt med den nye MySQL Freeze Frame