Tom: MySQL, Datensätze löschen

Hello,

wie lösche ich möglichst mir einem Statement alle Datensätze einer Tabelle, deren Feldwert von "Name" in einer anderen Tabelle vorkommt.

Oder wie markiere ich diese Datensätze?

Ich habe in dem System nur MySQL 3.23.55 zur Verfügung.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. Hello,

    wie lösche ich möglichst mir einem Statement alle Datensätze einer Tabelle, deren Feldwert von "Name" in einer anderen Tabelle vorkommt.

    Oder wie markiere ich diese Datensätze?

    Ich habe in dem System nur MySQL 3.23.55 zur Verfügung.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    Abfragen kannst du z.b., wenn du einen JOIN verwendest. Es gibt LEFT JOIN, INNER JOIN und RIGHT JOIN je nachdem was du verwendest. Soweit ich weiss, kann mysql in der aktuellen Version noch keine unterabfragen (ala //select * from a where id in (select id from b)// ). wird von daher ein bisschen blöd. oder du baust es in die where-klausel ein, das ist aber unübersichtlicher code find ich, falls du es später debuggst.

    Hier ein Beispiel mit join ist leicht anzupassen:

    select tbla.id, tbla.name, tblb.gruppe
    from tbla
    inner join tblb on tbla.id = tblb.id
    where tblb.gruppe = 'Administrator'

    1. Hello,

      Abfragen kannst du z.b., wenn du einen JOIN verwendest.

      Ein Select nützt mir nichts. Ich benötige entweder ein "delete ...join" oder ein "update ... join" oder sowas ähnliches.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hello,

        Abfragen kannst du z.b., wenn du einen JOIN verwendest.

        Ein Select nützt mir nichts. Ich benötige entweder ein "delete ...join" oder ein "update ... join" oder sowas ähnliches.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        Nu ich dachte, du brauchst beide Methoden. Hab gegoogelt, mysql kann ab v4.1 unterabfragen. das heisst > alternative.
        ich hatte so ein problem bereits unter javaserverpages.
        Ich hab einfach die werte in ein Array geschrieben und einfach per Schleife eingebunden so etwa:

        delete * from table where id in (1,2,3,4,5)

        die zahlen 1 bis 5 fragst du in einer anderen Abfrage zuvor ab.
        Danach baust du eine Schleife und manipulierst den String.
        Der einzige Nachteil ist Performance, je nachdem wie die Umgebung und der Code ist, aber es sollte normal gar nicht zu spüren sein.
        Falls du Hilfe brauchst, post mal den Sourcecode.

        mfg

  2. echo $begrueszung;

    wie lösche ich möglichst mir einem Statement alle Datensätze einer Tabelle, deren Feldwert von "Name" in einer anderen Tabelle vorkommt.

    Ich habe in dem System nur MySQL 3.23.55 zur Verfügung.

    Tja, da wird dir wohl, denke ich, nichts weiter übrigbleiben als unter den folgenden Ansätzen den deines geringsten Missfallens zu wählen:

    • "upgrade to MySQL 4.0.x"
    • "use a procedural programming language (such as Perl or PHP) ..."
    • "use interactive SQL to construct a set of DELETE statements automatically..."
    • Die guten ins Töpfchen (INSERT INTO neueTabelle SELECT ...), die schlechten ins Kröpfchen (da sind sie schon drin, also nur noch DROP alteTablelle und RENAME TABLE...)

    Die ersten drei "Tipps" sind im Kapitel 1.7.4.1 des Handbuchs deiner Version zu finden, den 4. fand ich in den Google-Groups

    echo "$verabschiedung $name";