Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Löschabfrage mit 2 verknüpften Tabellen (geht das?)

Begonnen von KonradR, September 22, 2024, 12:55:17

⏪ vorheriges - nächstes ⏩

KonradR

Hallo liebe Accessfreunde,

ich habe mal wieder eine neue Herausforderung. Und zwar habe ich verwaiste Datensätze, die ich löschen möchte. Nun dachte ich mir, dass ich das mit einer Löschabfrage bewerkstellige. Und zwar in dem ich im nach dem Fremdschlüssel in der verknüpften Tabelle als Kriterium filtere, der NULL ist. Wenn ich die Löschabfrage dann ausführe erscheint die Fehlermeldung "Löschen aus angegebenen Tabellen nicht möglich." Heißt das, dass eine Löschabfrage nur mit einer Tabelle ohne Verknüpfungen und Felder zu anderen Tabellen funktioniert?
Hier meine Löschabfrage aus der Entwurfansicht:
Sie dürfen in diesem Board keine Dateianhänge sehen.

Knobbi38

ZitatHeißt das, dass eine Löschabfrage nur mit einer Tabelle ohne Verknüpfungen und Felder zu anderen Tabellen funktioniert?
Nein, natürlich kannst du DS löschen, aber das Ganze muß unter Beachtung der relationalen Bedingungen zwischen den beteiligten Tabellen erfolgen. DS die in einer anderen Tabelle zu dem Zeitpunkt noch referenziert werden, können nicht gelöscht werden.


KonradR

Zitat von: knobbi38 am September 22, 2024, 13:02:08DS die in einer anderen Tabelle zu dem Zeitpunkt noch referenziert werden, können nicht gelöscht werden.
Für mich heißt das, wenn der zu löschende Datensatz sich auch auf eine referenzierte Tabelle erstreckt, kann er nicht gelöscht werden.

Zitat von: knobbi38 am September 22, 2024, 13:02:08Nein, natürlich kannst du DS löschen, aber das Ganze muß unter Beachtung der relationalen Bedingungen zwischen den beteiligten Tabellen erfolgen
Also geht es doch? Die referentielle Integrität habe ich abgewählt. Aber es geht trotzdem nicht. Gibt es noch eine andere Lösung?

Knobbi38

Was du mit dem ersten Teil deiner Antwort sagen möchtest, verstehe ich nicht, aber wenn du den oder die DS nicht löschen kannst, werden sie von anderer Stelle noch referenziert - nicht mehr und nicht weniger.

Es müssen alle Referenzen auf den DS gelöscht werden und dann erst kann der DS aus tblLadenMarkeZutat selber gelöscht werden.

Gruß Ulrich

Knobbi38

#4
Hallo Konrad,

deine Löschabfrage generiert einen Join, welcher von Jet SQL mit der Fehlermeldung quittiert wird.

Probiere es mal so:
DELETE FROM tblLadenMarkeZutat
WHERE LaMaZID NOT IN (
  SELECT ZutatSammelLaMaZIDRef
  FROM tblZuTatSammel
  WHERE ZutatSammelLaMaZIDRef IS NOT NULL
)

Alternativ könntest du auch die Variant mit Not Exists verwenden.

Gruß Ulrich

KonradR

#5
Zitat von: knobbi38 am September 22, 2024, 14:56:54DELETE FROM tblLadenMarkeZutat
WHERE LaMaZID NOT IN (
  SELECT ZutatSammelLaMaZIDRef
  FROM tblZuTatSammel
  WHERE ZutatSammelLaMaZIDRef IS NOT NULL
)
Danke für die Inspiration. Muss da zwischen DELETE und FROM nicht noch ein * oder irgendwas anderes?
Da gibts für das Feld ZutatSammelLaMaZIDRef eine Parameterabfrage.

Knobbi38

Hallo Konrad,

Parameterabfragen sind in den meisten Fällen Unstimmigkeiten bei den Feldnamen, daß mußt du halt anpassen, und lt. Doku ist eine Feldangabe beim DELETE optional.

Gruß Ulrich
 

KonradR

Hallo  knobbi38,

Zitat von: knobbi38 am September 23, 2024, 10:22:14Parameterabfragen sind in den meisten Fällen Unstimmigkeiten bei den Feldnamen
Danke für den Tip. Es war:
DELETE FROM tblLadenMarkeZutat
WHERE LaMaZID NOT IN (
  SELECT ZutatSammlLaMaZIDRef
  FROM tblZuTatSammel
  WHERE ZutatSammlLaMaZIDRef IS NOT NULL
)