Sql: delete mit 2 referenzen

hi all!

ich habe 2 probleme:
(1) mysql
(2) ich bekomme folgende query nicht hin … das problem ist dieses:
ich habe 3 tabellen tbl_movie, tbl_review und tbl_recommendation
tbl review und tbl_recommendation haben beide eine referenz auf tbl_movie:

tbl_movie.mov_id
tbl_review.rev_movie_id
tbl_recommendation.rec_movie_id

nun möchte ich per delete alle datensätze aus tbl_movie löschen, für die weder eine referenz von tbl_review noch eine von tbl_recommendation existiert.

wie mache ich das am besten? geht im grunde auch aufgesplittet, da ich mit php als backend arbeite. das ganze in eine query zu pressen, wäre aber (1) eleganter, (2) schneller und (3) würd ichs endlich lernen …

vielen dank,

  • stefan

ps: in der mysql-doku hab ich dazu nichts gefunden … das ganze also so schön per löschweitergabe zu machen, spielts dank mysql sowieso nicht.

Wußte gar nicht, das MySQL ein Problem ist :wink:)

Für das 2. Probleme hilft eine Subquery bzw. 2 Subqueries:

DELETE FROM
 tbl\_movie
WHERE
 mov\_id NOT IN(SELECT rev\_mov\_id FROM tbl\_review) AND
 mov\_id NOT IN(SELECT rec\_mov\_id FROM tbl\_recommendation)

Viel Spaß beim löschen und nicht vergessen, vorher zu sichern!!!

Stefan.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wußte gar nicht, das MySQL ein Problem ist :wink:)

Hier dürftest Du gerade mit Deinem Lösungsvorschlag falsch liegen, denn…

Für das 2. Probleme hilft eine Subquery bzw. 2 Subqueries:

…MySQL kann derzeit keine SubQueries - oder ist wieder eine neue Version raus?

Gruß

J.

Wie sieht’s denn mit JOINs aus (Inner und Outer)? Gibt’s auch keine Stored Procedures?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wie sieht’s denn mit JOINs aus (Inner und Outer)? Gibt’s auch
keine Stored Procedures?

Die Lösung dürfte ein Left Join mit Bedingung Feld is null an der rechten Seite sein. Das Ganze eingeklammert und wiederholt, da es zwei abhängige Tabellen sind. Aber ich weiß nicht, ob MySQL so schlau ist, auf so einen Konstrukt eine Delete-Operation zuzulassen (habe meine Testinstallation vor einiger Zeit gelöscht).

Gruß

J.

Einen mehrfach verschachtelten JOIN würde ich eher nicht verwenden. Wer weiß, wie der wirklich ausgeführt wird (Execution Plan und Optimizing…). Wenn das „einfache“ Subquery-SQL nicht funktioniert dann würd ich’s mit einer SP probieren, wo ich mit einem Curser die Tabellen abgrase. Oder gibt’s vielleicht den Curser auch nicht?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wenn das „einfache“
Subquery-SQL nicht funktioniert dann würd ich’s mit einer SP
probieren, wo ich mit einem Curser die Tabellen abgrase. Oder
gibt’s vielleicht den Curser auch nicht?

Momentan gibt es weder SPs noch, logischerweise, Cursoren.
http://www.mysql.com/doc/A/N/ANSI_diff_Triggers.html

Gruß

J.

Ergo: Alternativsystem
Das MySQL so „schwach“ ist, hätte ich nicht gedacht. Ich würd’ mir ein anderes RDMS suchen.

Das MySQL so „schwach“ ist, hätte ich nicht gedacht. Ich würd’
mir ein anderes RDMS suchen.

Ich fand (finde) MySQL vom Ansabtz her sehr interessant - zum Arbeiten konnte ich mich aber noch nicht durchringen. Und es entwickelt sich schnell: vor kurzem kannte es keine Transaktionen, jetzt sind sie da.

Solange bleibe ich bei Oracle. Aber wer weiß, wie schnell das gehen wird…

Gruß

J.