Angenommen, Sie implementieren die DELETE-Anweisung für eine SQL-Engine. Wie löschst du zwei Zeilen aus einer Tabelle, die genau identisch sind? Du brauchst etwas, um das eine vom anderen zu unterscheiden! Sie können tatsächlich löschen nicht vollständig doppelte Zeilen unter den folgenden Bedingungen (alle Spalten gleich sind) (als zur Verfügung gestellt)
- Keine Verwendung von ROWID oder ROWNUM
- keine temporäre Tabelle
- Keine prozeduralen Code
Es kann jedoch auch getan werden, wenn eine der Bedingungen entspannt ist.Hier sind unter Verwendung von Lösungen, die mindestens eine der drei Bedingungen
Tabelle sei angenommen, ist definiert als unterhalb
Erstellen Tabelle T1 (
spalte1 vacrchar2 (100),
Col2 Nummer (5),
col3 Nummer (2)
);
Doppelte Zeilen Identifizierung:
Select Sp1, Sp2, col3
von t1
Gruppe von Sp1, Sp2, col3
mit COUNT (*)> 1
Duplizieren Zeilen können auch identifiziert werden mit dieser: wählen Sie c1, c2, c3, row_number() über (Partition von (c1, c2, c3) Reihenfolge von c1, c2, c3) rn
von t1
HINWEIS: Die analytische Funktion row_number() kann nicht in einer DELETE-Anweisung verwendet werden, wie von JohnFx zumindest in Oracle 10g vorgeschlagen.
von t1 streichen row_id>
(select min (t1_inner.row_id) von t1 t1_innner
wo t1_inner.c1 = t1.c1 und t1_inner.c2 = t1.c2 und t1_inner.c3 = t1.c3))
Tabelle t1_dups erstellen, wie (012.350.952 hier // Schreibabfrage die doppelten Zeilen als liste oben //
)
löschen von t1
wo t1.c1, t1.c2, t1.c3 in (select * from t1.dups zu finden)
INSERT INTO t1 (
select c1, c2, c3 aus t1_dups)
Dies wird einen Ansatz ähnlich dem Fall verwenden, in dem wir eine temporäre Tabelle verwenden.
Ugh. Vertrau mir. Du willst diesen Job sowieso nicht. Eine Frage, bei der man sich die Hände hinter den Rücken bindet, soll eher zeigen, wie schlau der Interviewer den Kandidaten nicht testet. – JohnFx
Danke, JohnFx, für die Unterstützung ... macht mich glücklicher Ich habe diesen Job nicht verfolgt. –
Das letzte, was Sie wollen, ist ein Chef, der keine Lösung will, er/sie will IHRE Lösung. Es ist ein Anfänger Manager Fehler und sehr narzisstisch zu versuchen, Klone von sich einzustellen. – JohnFx