Ungültige Relationen aus Verknüpfungstabelle löschen

Ungültige Relationen aus Verknüpfungstabelle löschen

am 05.10.2006 12:25:53 von Bernd Muent

Hallo zusammen,
ich habe eine Tabelle mit Artikeln:

articles:
ID Beschreibung .....
1 Art 1
2 Art 2

etc.

Und eine Tabelle für "Siehe auch"-Verknüpfungen:
related:
aID relID
2 1
1 2

Nun möchte ich gerne tote Verknüpfungen rauswerfen, also solche bei
denen entweder aID oder relID nicht (mehr) in der Tabelle articles
vorhanden ist.
Aber irgendwie stehe ich da gerade auf dem Schlauch.
Wie kann ich folgendes Sprachkonstrukt in SQL formulieren?
"DELETE FROM related WHERE ("aID nicht in articles") OR ("relID nicht in
articles")"

Danke für Tips, Bernd

--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt@bmservices.de

Re: Ungültige Relationen aus Verknüpfungstabelle löschen

am 05.10.2006 12:48:48 von Kris

Bernd Muent wrote:
> Nun möchte ich gerne tote Verknüpfungen rauswerfen, also solche bei
> denen entweder aID oder relID nicht (mehr) in der Tabelle articles
> vorhanden ist.
> Aber irgendwie stehe ich da gerade auf dem Schlauch.
> Wie kann ich folgendes Sprachkonstrukt in SQL formulieren?
> "DELETE FROM related WHERE ("aID nicht in articles") OR ("relID nicht in
> articles")"

Du kannst Dir eine Liste der toten Verknüpfungen mit jeweils einem LEFT JOIN
bauen, und das dann in ein DELETE mit Join übersetzen.

Also

select aid from articles as a left join related as r on a.aid = r.aid where
r.aid is null;

und dann weiter.

Kris

Re: Ungültige Relationen aus Verknüpfungstabelle löschen

am 05.10.2006 13:13:33 von Claus Reibenstein

Bernd Muent schrieb:

> Wie kann ich folgendes Sprachkonstrukt in SQL formulieren?
> "DELETE FROM related WHERE ("aID nicht in articles") OR ("relID nicht in
> articles")"

DELETE FROM related
WHERE aID NOT IN (SELECT ID FROM articles)
OR relID NOT IN (SELECT ID FROM articles)

Allerdings ist da 2x das gleiche SELECT drin. Die Profis hier wissen
sicher, wie man das auch noch wegbekommt.

Gruß. Claus