Heim > Datenbank > MySQL-Tutorial > Verfügt MySQL über ein ROWID-Äquivalent zum Löschen doppelter Datensätze?

Verfügt MySQL über ein ROWID-Äquivalent zum Löschen doppelter Datensätze?

Linda Hamilton
Freigeben: 2024-12-09 20:20:15
Original
524 Leute haben es durchsucht

Does MySQL Have a ROWID Equivalent for Deleting Duplicate Records?

MySQL-Äquivalent der RowID von Oracle

In Oracle identifiziert die ROWID-Spalte jede Zeile in einer Tabelle eindeutig. Gibt es eine äquivalente Spalte in MySQL?

Die Frage stellt sich häufig, wenn Vorgänge wie das Löschen doppelter Datensätze bei gleichzeitiger Festlegung eines Primärschlüssels ausgeführt werden, wie in der bereitgestellten Abfrage:

delete from my_table where rowid not in (select max(rowid) from my_table group by field1,field2)
Nach dem Login kopieren

MySQL-Lösung

Im Gegensatz zu Oracle hat MySQL kein direktes Äquivalent zu ROWID. Stattdessen können Sie Sitzungsvariablen verwenden, um eine eindeutige Zeilenkennung zu generieren:

SELECT @rowid:=@rowid+1 as rowid
FROM table1, (SELECT @rowid:=0) as init
ORDER BY sorter_field
Nach dem Login kopieren

Dieser Ansatz kann jedoch nicht in Unterabfragen verwendet werden, die nach der Zieltabelle sortieren, aus der gelöscht wird.

Alternativer Ansatz

Um doppelte Datensätze zu löschen und einen Primärschlüssel zu erzwingen, können Sie eine temporäre Tabelle erstellen, um die eindeutige Zeile zu speichern Bezeichner:

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
Nach dem Login kopieren

Dieser Ansatz erstellt eine temporäre Tabelle, fügt die eindeutigen Zeilenbezeichner ein und verwendet dann einen Join, um doppelte Datensätze aus der Originaltabelle zu löschen. Obwohl dadurch ein geringer Mehraufwand entsteht, ist es eine praktikable Lösung für einmalige Vorgänge.

Das obige ist der detaillierte Inhalt vonVerfügt MySQL über ein ROWID-Äquivalent zum Löschen doppelter Datensätze?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage