Multitable Delete unter Mysql 3.23.51

MySQL, PostgreSQL, SQLite
pnb
Posts: 4
Joined: 2003-12-04 18:24

Multitable Delete unter Mysql 3.23.51

Post by pnb » 2004-02-10 00:18

Hallo,

ich habe unter Mysql 3.23.51 zwei Tabellen:

Tabelle1
acid | aid
1 | 1
2 | 3
3 | 5
4 | 3
...

Die Tabelle hat noch eine weitere Spalte, ist aber hier nicht von belang, solang man die Sinnfrage nicht stellt. acid ist auto_increment und primary key, aid ist foreign key.

Tabelle2
aid | tid
1 | 1
3 | 1
5 | 3
...

Auch hier gibt es weitere Tabellen. Aid ist auto_increment und primary key, tid ist ein foreign key aus einer 3. Tabelle.

Nun möchte ich aus Tabelle 1 alle Zeilen löschen, bei denen die aid einer Aid aus Tabelle 2 entspricht, bei der die tid einen gewissen Wert x hat.
Wenn also z.B. x=1 würden alle Zeilen aus Tabelle1 gelöscht, bei denen die aid=1 oder 3 sind.

Mysql 3.x kennt nur leider noch keine Multitable Delte-Befehle. Wie mache ich dass dann?

majortermi
Userprojekt
Userprojekt
Posts: 930
Joined: 2002-06-17 16:09

Re: Multitable Delete unter Mysql 3.23.51

Post by majortermi » 2004-02-10 13:20

pnb wrote:Mysql 3.x kennt nur leider noch keine Multitable Delte-Befehle. Wie mache ich dass dann?
Das geht nur, indem du zunächst mit einem SELECT alle betroffenen IDs bestimmst und anschließend für diese IDs ein DELETE durchführst.

Das ist einer der Gründe, warum MySQL unter Datenbank-Entwicklern nicht sooo beliebt ist - aber mit MySQL 4.1 / 5.0 wird das ja alles besser, selbst 4.0 hat schon viele Verbesserungen gebracht.
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...

pnb
Posts: 4
Joined: 2003-12-04 18:24

Re: Multitable Delete unter Mysql 3.23.51

Post by pnb » 2004-02-10 13:52

Erstmal Danke für die rasche Antwort.
Das Problem ist nicht die Select anfrage, was mich stört ist, dass ich die IDs in meiner Skriptsprache abspeichern muss und nicht in einem SQL-Befehl verpacken kann.
Oder gibt es eine möglichkeit, dass in ein oder zwei SQL-Befehlen zu schachteln?

Ist das unter Postgresql besser gelöst?

majortermi
Userprojekt
Userprojekt
Posts: 930
Joined: 2002-06-17 16:09

Re: Multitable Delete unter Mysql 3.23.51

Post by majortermi » 2004-02-10 16:30

pnb wrote:Oder gibt es eine möglichkeit, dass in ein oder zwei SQL-Befehlen zu schachteln?
Genau das nennt man Sub-SELECTs oder Sub-Queries und ist erst ab MySQL 4.1 (momentan noch Alpha) möglich.
Ist das unter Postgresql besser gelöst?
Ja, PostgreSQL beherrscht schon seit Ewigkeiten Sub-Queries. Da kann man dann etwas in folgender Art machen:

Code: Select all

DELETE FROM tabelle_c WHERE id IN (SELECT a.id FROM tabelle_a AS a, tabelle_b AS b WHERE b.irgendwas=1 AND b.id=a.id)
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...