Hallo NewWonder
Sorry wegen der verspäteten Antwort
wenn ich die mit den richtigen Feldnamen abgeänderte
SQL-Abfrage so eingebe und speichern möchte, bekomme ich immer
einen Syntaxfehler
von Access 2000 angezeigt- alles ab EXISTS ist dann markiert.
Wie ist denn der genaue Wortlaut der Fehlermeldung?
DELETE *
FROM tabelle_1 t1
WHERE EXISTS(
SELECT ‚x‘
FROM tabelle_2 t2
WHERE t1.feld1 = t2.feld2
AND
WHERE t1.feld3 = t2.feld4)
Jemand ne Idee wo der Fehler liegt?
feld3 muss auf tabelle_1 liegen und feld4 muss auf tabelle_2 liegen. Vielleicht ist da was vertauscht.
Wieso heisst das eigenlich:
SELECT ‚x‘
und nicht
SELECT ‚*‘
oder ist das das gleiche?
Und dann noch ein paar Worte zu SQL im Allgemeinen:
Es kommt in diesem Fall nicht drauf an, ob man SELECT ‚x‘, SELECT ‚*‘, SELECT 1 oder SELECT ‚MaxUndMoritz‘ schreibt. Wichtig ist, dass ÜBERHAUTP etwas selektiert wird. Denn die Funktion „EXISTS()“ liefert den Wert TRUE, wenn ein oder mehrere Datensätze in der Unterabfrage gefunden wurden, und den Wert FALSE, wenn kein Datensatz gefunden wurde. Welcher Art der Datensatz ist, den man zurückgibt, ist unwichtig; ich persönlich bevorzuge ‚x‘.
Die Unterabfrage liefert in diesem Beispiel also für jeden Datensatz in „tabelle_2“ ein x, wenn die Werte in „feld2“ und „feld4“ mit den Werten von „feld1“ und „feld3“ des aktuellen Datensatzes von „tabelle_1“ übereinstimmen. Wenn mindestens 1 ‚x‘ zurückgegeben wird, liefert die Funktion „EXISTS()“ den Wert TRUE, und der aktuelle Datensatz von „tabelle_1“ kann gelöscht werden. Ansonsten wird der aktuelle Datensatz nicht gelöscht, und der DELETE-Befehl springt zum nächsten Datensatz von „tabelle_1“
Hoffe, dass ich dir damit helfen konnte.
Wenn nicht, einfach nochmal melden.
Gruss: Christian