Mazze: Delete gruppiert

Hallöchen zusammen und ein schönes neues Jahr!

Folgendes Problem eines MYSQL-DELETE-Statements beschäftigt mich seit einger Zeit:

Tabelle Objekte:

id | wert

Tabelle Unterobjekte

id | objekt_id

(objekt_id ist die Zuordnung zu id in der oberen Tabelle)

Nun sollen alle Einträge in "Objekte" gelöscht werden, die den wert "foo" haben und alle Einträge in "Unterobjekte", deren Objekt-ID mit denen in "Objekte" übereinstimmt, die gelöscht werden sollen (die eben den wert "foo" haben).

Ich hatte gehofft, dass es so funktionieren könnte:

DELETE FROM Objekte o, Unterobjekte u WHERE o.wert = "foo" AND u.objekt_id = o.id

Klappt aber leider nicht so.

Hat jemand von Euch eine Idee, wie das machbar ist?

Vielen Dank,

Mazze

  1. yo,

    Nun sollen alle Einträge in "Objekte" gelöscht werden, die den wert "foo" haben und alle Einträge in "Unterobjekte", deren Objekt-ID mit denen in "Objekte" übereinstimmt, die gelöscht werden sollen (die eben den wert "foo" haben).

    zum einen könnte man mit foreign keys arbeiten, die einem genau das abnehmen. ich bin mir nicht sicher, ab welcher version mysql fk constraints unterstützt und unter welcher engine. schau einfach mal in der doku nach.

    zum anderen kannst du dir mal folgenden syntax für multiple tabellen anschauen.

    http://dev.mysql.com/doc/refman/5.1/en/delete.html

    Ilja

  2. echo $begrüßung;

    DELETE FROM Objekte o, Unterobjekte u WHERE o.wert = "foo" AND u.objekt_id = o.id

    Gemäß Handbuchkapitel zur DELETE Syntax (speziell Multiple-table syntax) sind die Tabellen in denen gelöscht werden soll vor dem FROM anzugeben. Die Angabe nach dem FROM bezieht sich auf die für die Ermittlung der Datensätze benötigen Verknüpfungen.
    Es gibt noch eine zweite Syntax mit DELETE FROM ... USING ... WHERE ...

    echo "$verabschiedung $name";