Löschen von doppelten Zeilen mit Analytischen Funktionen
Können wir löschen doppelte Zeilen über analytische Funktionen? Ich meine, mit row_number()
oder rank
oder dense_rank() in der Sql-Abfrage in Oracle?
- Es ist nicht ganz klar, was Sie für Fragen. Schreiben Sie die Abfrage, die Sie möchten, um zu arbeiten, und es hier posten (mit irgendeiner Fehlermeldung, wenn Sie eine erhalten), auf diese Weise Menschen eine bessere Vorstellung von genau das, was Sie wollen.
- Die Antwort auf diese Frage ist: "ja". Vielleicht könnte jemand ein bisschen mehr hilfreich und bieten eine thoroug Erklärung, wenn Sie erklären könnte, was Sie zu tun versuchen, wie von Mat vorgeschlagen hat.
- Ich bin versucht zu löschen doppelte Zeilen. Ich weiß, das selbe ist auch mit rowid in oracl.. gibt es eine andere Möglichkeit??
- Nicht, ohne einen größeren Ressourcen-intensive sql-Anweisung als nötig. Irgendeinen Grund, warum Sie wirklich nicht wollen, verwenden Sie die rowid?
- Ich versuche nur, zu wissen, ob dies getan werden könnte, über Analytische Funktionen, ohne rowid!!
- Um diese Erweiterung, die Sie nicht erreichen können, löschen von Zeilen mit analytischen Funktionen in einer einzigen Anweisung. Sie können es mit mehreren Anweisungen, wo Sie die eindeutigen Zeilen in eine eigene Tabelle. Und ersetzen Sie die aktuelle Tabelle mit dieser einzigartigen Daten.
- Wenn Sie keine eigene Spalte in der Tabelle und Zeilen, die sind 100% gleich, Sie müssen etwas zu identifizieren, diese Zeilen. Was passiert zu sein
rowid
. Eine andere option wäre, fügen Sie einen Primärschlüssel Spalte der Tabelle, füllen Sie es mit einer Sequenz, und verwenden Sie diese zu identifizieren, Ihre Zeilen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
ROW_NUMBER()
über eine partition der Spalten eindeutig sein muss für Sie, e.g:ROW_NUMBER() OVER (PARTITION BY COLUMN1, COLUMN2 ORDER BY COLUMN1)
. Jedes Ergebnis hat eine rownumber > 1 ist eine doppelte.Können Sie dann zum Beispiel die Rückkehr der rowid ist für diese und löschen Sie Sie.
Wir können
Analytical Functions
oder andere Art und Weise, wieAggregate Functions
, 'DEUTLICHE`, um herauszufinden, ob wir die Duplikate in der Tabelle oder nichtwie mit
Analytical Functions
aber, Sie zu löschen, müssen wir die
ROWID
diejenigen, derenrnum>1
sonst können wir einfach nutzen
gehen Sie folgendermaßen vor, um doppelte Datensätze ohne Verwendung der rowid,rownum
1. erstellen Tabelle zum speichern der unterschiedlichen Werte der ursprünglichen Tabelle.
löschen Sie die Datensätze aus der ursprünglichen Tabelle.
legen Sie eine temporäre Tabelle, die Werte in die ursprüngliche Tabelle.
Ja. Aber es könnte ein wenig einfacher mit Aggregat-Funktion
fiddle
rownum
mit alias-oder Tabellenname liket1.rownum
alsrownum
reserviert ist, die Arbeit inORACLE
delete
- Anweisung ohnerowid
s? Ich weiß es nicht.Dies ist die Art von Sache, die Sie tun sollten: