Frank: MySQL: löschen

Hi,

ich habe zwei Tabellen A und B.
Ich möchte nun alle Zeilen aus A löschen, die auch in B vorhanden sind. Vielmehr in der eine Spalte gleich ist, aber das ist ja dann (fast) das gleiche.

Bisher mache ich das so:

delete from tab_a using tab_a,tab_b where 1 and tab_a.text=tab_b.text

dabei sind tab_a/tab_b die Tabellen, text soll die Spalte sein.

Ich glaube, das ist nicht sehr effektiv, geht es besser???

Danke!

  1. Halihallo Frank

    delete from tab_a using tab_a,tab_b where 1 and tab_a.text=tab_b.text

    das "1 and" kannst du dir sparen, das ist redundant.

    Ich glaube, das ist nicht sehr effektiv, geht es besser???

    Es ist sehr effektiv und sogar effizient. Eine mögliche Verbesserung wäre ein Index
    auf text, dann geht das selektieren der gleichen texte schneller und somit das löschen.
    Wo ist denn das Problem?

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Hi Philipp,

      delete from tab_a using tab_a,tab_b where 1 and tab_a.text=tab_b.text

      das "1 and" kannst du dir sparen, das ist redundant.

      ist 'ne Angewohnheit. In dem Fall braucht man es nicht, aber bei Variablen dahinter schon manchmal...

      Ich glaube, das ist nicht sehr effektiv, geht es besser???

      Es ist sehr effektiv und sogar effizient. Eine mögliche Verbesserung wäre ein Index
      auf text, dann geht das selektieren der gleichen texte schneller und somit das löschen.
      Wo ist denn das Problem?

      Es dauert sehr lange! Aber ich habe auch nur einen 233er Pentium mit 128MB Ram... naja.
      Index hatte ich auf das betreffende Feld nicht gesetzt, mal sehen.
      Das ist 'ne Prima Idee!!! Danke!
      Ich kenne schon "explain select ...."! :-)
      Aber ich habe meine Tabellen schon so oft geändert, daß mir das jetzt wohl abhanden gekommen ist!

      Gruß
      Frank