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?
Multitable Delete unter Mysql 3.23.51
-
- Userprojekt
- Posts: 916
- Joined: 2002-06-17 16:09
Re: Multitable Delete unter Mysql 3.23.51
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.pnb wrote:Mysql 3.x kennt nur leider noch keine Multitable Delte-Befehle. Wie mache ich dass dann?
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...
Warum man sich an diese Reihenfolge halten sollte...
Re: Multitable Delete unter Mysql 3.23.51
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?
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?
-
- Userprojekt
- Posts: 916
- Joined: 2002-06-17 16:09
Re: Multitable Delete unter Mysql 3.23.51
Genau das nennt man Sub-SELECTs oder Sub-Queries und ist erst ab MySQL 4.1 (momentan noch Alpha) möglich.pnb wrote:Oder gibt es eine möglichkeit, dass in ein oder zwei SQL-Befehlen zu schachteln?
Ja, PostgreSQL beherrscht schon seit Ewigkeiten Sub-Queries. Da kann man dann etwas in folgender Art machen:Ist das unter Postgresql besser gelöst?
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...
Warum man sich an diese Reihenfolge halten sollte...