Anmelden

View Full Version : Doppelter schlüssel, warum?



Robi
15-05-24, 14:37
moin zusammen

ein SQL kopiert Daten aus sich selber.
Unique Key F1 und F2.
Es gibt keine Sätze mit F2 = 902

insert into Datei select f1, 902, f3, f4, ...from Datei
where F2 <> 902 and (f1, 902) not in (select f1, f2 from datei) and
div. andere Bedingungen ohne F1/f2 bezug

Kopiervorgang bricht ab wegen doppeltem Schlüssel

habe mit F2 <> 902 verhindert, das sich 'frisch entstandene Sätze' erneut kopieren
m.e. unnötig da mit dem "not in" auch noch verhindert wird, das aus

A 1 --> A 902 und aus
A 2 --> ebenfalls A 902 wird

wie kann ich den doppelten Schlüssel effekitv verhindern?

7.4. so ziemlich alle PTF


Danke

Fuerchau
15-05-24, 17:26
SQL optimiert, so dass die Where-Klausel zuerst geprüft werden und ein Resultset bildet.
In diesem Resultset sind deine neu eingefügten Sätze natürlich nicht enthalten und werden somit nicht geprüft.
Wenn die neuen Sätze dann zu einem doppelten Schlüssel führen bekommst du halt den Fehler.

Ggf. musst du statt "not in" einen "select ... from datei exception join lateral (select ... from datei where ...)" machen.
Der Lateral kann nicht optimiert werden und grift immer neu auf die Tabelle zu, so dass neu hinzugefügte Zeilen dann berücksichtigt werden.

"exception join" entspricht einen "not exists" nur als Join-Beziehung statt where.