Page 1 of 1

Multitable Delete unter Mysql 3.23.51

Posted: 2004-02-10 00:18
by pnb
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?

Re: Multitable Delete unter Mysql 3.23.51

Posted: 2004-02-10 13:20
by majortermi
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.

Re: Multitable Delete unter Mysql 3.23.51

Posted: 2004-02-10 13:52
by pnb
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?

Re: Multitable Delete unter Mysql 3.23.51

Posted: 2004-02-10 16:30
by majortermi
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)