valume91
Goto Top

Im Access nicht verknüpfte Datensätze löschen

Wie kann ich bei zwei verknüpften Tabellen aus der Mastertabelle die Datensätze löschen die keinen FS in der zweiten Tabelle besitze?

Hallo liebes Forum

Ich habe zwei Tabellen die miteinander verknüpft sind. Nun möchte ich ein Makro oder eine Löschabfrage die mir automatisch alle Datensätze in der Mastertabelle löscht, zu denen es keinen entsprechenden Fremdschlüssel in der zweiten Tabelle gibt!
Oder anders ausgedrückt soll es alle Datensätze löschen die keine Verknüpfung zur zweiten Tabelle besitzen.
Wenn ich das mit einer Löschabfrage machen soll, was muss ich für Kriterien definieren?

Schon im voraus Danke für eure Antworten!

MfG Valume


Sollte bereits ein Beitrag vorhanden sein der das selbe Thema behandelt, Sorry!


Hier noch ein Bild der Beziehungen in meiner DB:

aa45676ff1aa8cecc6cdd0d0c515031f-beziehungen

Content-Key: 112842

Url: https://administrator.de/contentid/112842

Printed on: April 20, 2024 at 01:04 o'clock

Member: Biber
Biber Mar 31, 2009 at 12:21:33 (UTC)
Goto Top
Moin Valume91,

willkommen im Forum.

Es wäre bei derartigen Fragen sinnvoller, die Tabellen- und Feldnamen zu nennen.
Aber sei's drum - in der hoffnung, dass Du Du die entsprechende Übersetzungsleistung erbringen kannst:
Delete mastertab.* 
from mastertab left join fktab on mastertab.fkid=fktab.fkid
where fktab.fkid is null
... So sollte die Abfrage funktionieren.
Gefahrlos ausprobieren kannst du es ja vorher mit einem harmlosen:
select  mastertab.* 
from mastertab left join fktab on mastertab.fkid=fktab.fkid
where fktab.fkid is null

Grüße
Biber
Member: Valume91
Valume91 Mar 31, 2009 at 12:37:50 (UTC)
Goto Top
Hi Biber

Erstmal danke für die schnelle Hilfe!

Die Tabellen heissen Projektdaten (Master) und Produktliste.
Die Schlüsselfelder entsprechend Projektdaten_ID und Projektdaten_IDFS.

Delete mastertab.* 
 from mastertab left join fktab on mastertab.fkid=fktab.fkid
 where fktab.fkid is null
 

Wo muss ich das reinschreiben? Bei Kriterium?
Ich nehme an fktab steht für die zweite Tabelle?

MfG Valume
Member: Biber
Biber Mar 31, 2009 at 12:50:34 (UTC)
Goto Top
Moin Valume91,

mit Deinen Tabellen- und Feldnamen müsste es in etwa so aussehen:
DELETE P.*  
FROM projektdaten p
LEFT JOIN Produktliste PL ON P.Produktliste_IDFS = PL.Produktliste_ID
WHERE PL.Produktliste_ID is null


wenn ich es richtig interpretiere, dass das in beiden Tabellen vorhandene Feld
  • "Produktliste_IDFS" in der Master-Tabelle "Produktdaten" heisst
  • und Produktliste_ID in der Child-Tabelle "Produktliste"

Reinschreiben kannst Du es am Einfachsten mit ein paar Mausklicks beginnend:
  • "Abfragen"->"Neu" (doppelklick)-->"Entwurfsansicht" -->[nichts auswählen]-->"Schließen"
  • mit rechter maustaste Kontextmenü umschalten auf "SQL-Ansicht"
  • Copy und paste des Codes
  • Abfeuern

So zumindest bei Access 2000/2003.
Falls es bei Access 2007 anders sein sollte-->hab keins zum Spielen hier.

Grüße
Biber
Member: Valume91
Valume91 Mar 31, 2009 at 13:08:13 (UTC)
Goto Top
hmm er bringt ein Feld mit der Meldung:
Parameterwert eingeben:
P.Produktliste_IDFS

Was soll ich da eingeben?

Nochmals zum besseren Verständnis:
Ich habe zwei Tabellen:
"Projektdaten" (Master) mit dem Primärschlüssel Projektdaten_ID und eine Child-Tabelle "Produktliste" mit dem Fremdschlüssel Projektdaten_IDFS

MfG

Valume
Member: Biber
Biber Mar 31, 2009 at 13:23:08 (UTC)
Goto Top
Sorry, Valume91,

dann habe ich es missinterpretiert.
DELETE P.*  
FROM projektdaten p
LEFT JOIN Produktliste PL ON P.Projektdaten_ID = PL.Projektdaten_IDFS
WHERE PL.Projektdaten_IDFS is null

Grüße
Biber
Member: Valume91
Valume91 Mar 31, 2009 at 13:33:08 (UTC)
Goto Top
Hm die Abfrage scheint richtig zu sein jedoch bringt er die Fehlermeldung:
Löschen aus angegebenen Tabellen nicht möglich.

Kann man nicht aus einer Mastertabelle löschen oder wie?

Achja danke für deine Geduld Biber ;)
Member: Biber
Biber Mar 31, 2009 at 13:46:15 (UTC)
Goto Top
Tja, Valume91,

was/wieviele Sätze werden denn angezeigt, wenn Du statt des "DELETE P.* From bla" ein "SELECT P.* from bla" ausführst?
Existieren weitere FK-Beziehungen zu anderen Tabellen?

Grüße
Biber
Member: Valume91
Valume91 Mar 31, 2009 at 13:54:36 (UTC)
Goto Top
Es werden 16 Datensätze angezeigt, alle die keine Verknüpfung mehr zur Chlid-Tabelle haben, was ja auch völlig korrekt ist.
Was ist eine FK-Beziehung?
Es bestehen noch andere Beziehungen von anderen Tabellen zur Mastertabelle in der sich dann der entsprechende Fremdschlüssel befindet.
Wenn ich die Abfrage mit SELECT ausführe und dann die angezeigten Datensätze lösche, werden sie in der Abfrage gelöscht, aber in der Tabelle nicht, ausserdem werden sie bei erneutem starten der Abfrage wieder angezeigt.

PS: Kann ich hier irgendwie Bilder anfügen? Dann kan ich dir ein Printscreen des Modells zeigen.

MfG Valume
Member: Biber
Biber Mar 31, 2009 at 14:28:13 (UTC)
Goto Top
moin valume91,

Meinst du FS?
Was sollte denn Freising oder mein Führerschein, eine Fachschule, eine Festschrift oder der Flugsimulator mit unserem Problem hier zu tun haben... absurd. face-wink
Nein, ich meinte FK wie foreign key . That's outlandish for FS.

PS: Kann ich hier irgendwie Bilder anfügen? Dann kan ich dir ein Printscreen des Modells zeigen.
Kannst Du - es gibt sogar eine Anleitung dazu hier im Forum (-->Forumssuche "bilder anfügen").

Grüße
Biber
Member: Valume91
Valume91 Mar 31, 2009 at 14:52:13 (UTC)
Goto Top
So Bild ist drauf!
Hoffe das hilft dir weiter.
Ich mache Feierabend für Heute, wir sehen uns morgen. ;)

Ab in den FS (Feierabendstau) ;)
Member: Valume91
Valume91 Apr 01, 2009 at 07:00:36 (UTC)
Goto Top
Bin selbst drauf gekommen.
Man musste noch in den Eigenschaften der Löschabfrage bei Ausführungsberechtigung auf "Besitzer" und bei Eindeutige Ergebnisse auf "Ja" umstellen.

Vielen Dank nochmals Biber, du bist echt der hammer! ;)

MfG

Valume