Re: Delete Statement
[ ruban.de ] [ Antworten ] [ Forum ]
Geschrieben von Jürgen am Dezember 02, 2003 um 13:50:
Als Antwort auf Delete Statement geschrieben von MATT on November 27, 2003 um 13:30:
: Hallo, : ich habe ein Problem mit einem SQL Statement, das unter mysql funktioniert, aber nicht unter DB2. : Es geht um folgendes: : Ich habe eine Tabelle documents und eine Tabelle attributes. Wenn ich ein Dokument in documents speichere, dann werden Attribute dazu in der attributes-Tabelle gespeichert. Beide Tabellen sind über eine Spalte docid verbunden, die in beiden Tabellen existiert. : Jetzt mein Problem: : Falls ein Dokument aus der Documents-Tabelle gelöscht wurde, möchte ich danach alle Attributes löschen, zu denen es keinen Eintrag in der Documents-Tabelle gibt. : Unter mySQL funktioniert folgendes: : DELETE db.attrcountry : FROM db.attrcountry t2 : LEFT JOIN db.documents t1 : ON t2.docid=t1.docid : WHERE t1.docid IS NULL : : Unter DB2 würde das funktionieren: : (Allerdings gibt es unter mySql keine SubSelects) : DELETE FROM DOCPILOT.ATTRCOUNTRY WHERE : EXISTS( : select t2.docid from docpilot.attrcountry as t2 : left join docpilot.documents as t1 : on t2.docid = t1.docid : WHERE t1.docid IS NULL) : : Gibt es ein Statement, das für beide Datenbanken funktioniert? : Kann mir da jemand helfen? : Gruß MATT Hallo Matt,
es gibt zwei Möglichkeiten: Wechseln auf MySql Version 4.1, dort wird Subselect unterstützt. oder Das SQL-Statement in der MySQL-Form läuft aber auch unter DB2 UDB, da dort die Schlüsselwörter LEFT | RIGHT [OUTER] JOIN supportet werden, probier's aus :-) Mit Subselect wäre auch folgende verkürzte Form möglich (MySQL 4.1 oder DB2 UDB) DELETE FROM DOCPILOT.ATTRCOUNTRY d1 WHERE d1.docid NOT IN (SELECT docid from docpilot.documents); Zum Test kannst du ja mal das DELETE durch ein SELECT COUNT(docid) FROM DOCPILOT.ATTRCOUNTRY d1 WHERE d1.docid NOT IN (SELECT docid from docpilot.documents); ersetzen. Hoffe es nützt dir was Gruss Jürgen
Schreibe eine Antwort
|