Caballo: Aktionsabfrage mit update und join bzw. inner join

Hallo und frohe Ostern an alle.

Ich bekomme das  einfach nicht hin und bitte um Unterstützung.

Das folgende zeigt mir genau das an, was ich auch sehen möchte,
all User die in der Gruppentabelle  der Gruppe 6617 zugeordnet sind.

SELECT * FROM phpbb\_users INNER JOIN phpbb_user_group
ON phpbb_users.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617

Nun möchte ich in Tabelle phpbb_users von allen oben ausgewählten das Feld user_active verändert, auf 0 setzen

Ich dachte mir das geht in etwa so.

UPDATE   phpbb\_users\_bck
INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617
SET user_active=0

geht aber leider nicht !!

Wer weiß Rat ?

Vielen Dank

  1. Hallo und frohe Ostern an alle.

    Danke, gleichfalls :-)

    UPDATE   phpbb\_users\_bck
    INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
    WHERE phpbb_user_group.group_id =6617
    SET user_active=0

    Sollte eigentlich möglich sein, sofern du mindestens Mysql 4 installiert hast.
    Vielleicht musst du für die Spalte user_active noch die Tabelle angeben (tabelle.user_active).

    Falls du MyPhpAdmin verwendest wäre es für mich auf jeden Fall hilfreich wenn du noch den im Sql Abfragefenster angezeigten Fehler hier Posten würdest.

    Vielleicht hilft dir aber auch schon der folgende Artikel weiter:
    Cross Table Update

    Gruss Timo

    1. Hallo,
      ich  habe das gerade wie folgt noch einmal probiert.

      UPDATE   phpbb\_users\_bck   INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
      WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0

      die Fehlermeldung lautet
      #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0' at line 2

      Vielen Dank

      1. Hallo,

        UPDATE   phpbb\_users\_bck   INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
        WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0

        #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0' at line 2

        wie ich Dir bereits mitteilte, ist an dieser Stelle die WHERE-Klausel nicht erlaubt. Korrigiere die Reihenfolge der Klauseln.

        Freundliche Grüße

        Vinzenz

        1. Danke für die Nachricht,
          Wo muss den die Where Klausel hin ?

          Ich habe jetzt einiges dazu gelesen,
          jedoch wegen meinem mangelhaften Englisch nicht alles aus den Handbüchern u. Beispielen verstanden !

          UPDATE   phpbb\_users\_bck  WHERE phpbb_user_group.group_id =6617 INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id SET phpbb_users_bck.user_active=0

          So jedenfalls funktioniert es auch nicht!

          UPDATE   phpbb\_users\_bck  SET phpbb_users_bck.user_active=0  WHERE phpbb_user_group.group_id =6617  INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id

          So leider auch nicht !

          UPDATE   phpbb\_users\_bck  SET phpbb_users_bck.user_active=0 INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id  WHERE phpbb_user_group.group_id =6617

          Und so leider auch nicht !

          Könnte mir daher jemand meine  Aktions-Abfrage so umstellen/ korrigieren, das sie auch funktioniert ?

          Vielen Dank

          1. Hi,

            Danke für die Nachricht,
            Wo muss den die Where Klausel hin ?

            Ich habe jetzt einiges dazu gelesen,
            jedoch wegen meinem mangelhaften Englisch nicht alles aus den Handbüchern u. Beispielen verstanden !

            Abgesehen davon, dass du eigentlich nur dem Syntaxdiagram folgen musst - gibt es die Beschreibung der Update-Syntax im MySQL-Handbuch auch auf Deutsch.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. OK,
              ich habe es heute abermals probiert...

              UPDATE phpbb_users_bck , phpbb_user_group SET phpbb_users_bck.user_active=0
               WHERE phpbb_user_group.group_id =6617

              Es ging sogar ohne Fehlermeldung durch. !! Hurra !!

              Nur jetzt wird von allen User_id in phpbb_users_bck das user_active auf 0 gesetzt.

              Das wollte ich so nicht,
              sondern nur von den User_id die in phpbb_user_group eine group_id von 6617 besitzen, der user_active sollte in phpbb_users_bck auf 0 gesetzt werden.

              Man, was ist das kompliziert. !!

              Ich finde es ja nett und auch ausgepochen freundlich,
              das ihr mir wenigstens auf das deutsche Handbuch helft,
              aber weiß denn sonst niemand wie man das schreiben muss,
              damit genau das passiert was ich möchte ?

              Wie kann ich nun in phpbb_users_bck anstell von alle, nur die betreffenden  user_id  zur Veränderung der user_active auswählen ?

              Danke

              1. Hallo,

                UPDATE phpbb_users_bck , phpbb_user_group SET phpbb_users_bck.user_active=0
                WHERE phpbb_user_group.group_id =6617

                Nur jetzt wird von allen User_id in phpbb_users_bck das user_active auf 0 gesetzt.

                sondern nur von den User_id die in phpbb_user_group eine group_id von 6617 besitzen, der user_active sollte in phpbb_users_bck auf 0 gesetzt werden.

                dann solltest Du den INNER JOIN nicht durch einen CROSS JOIN (das kartesische Produkt der beiden beteiligten Tabellen) ersetzen.
                Da die Tabellenreferenzen in der UPDATE-Anweisung zuerst kommen, bedeutet dies

                UPDATE  
                    phpbb_users_bck  
                INNER JOIN  
                    phpbb_user_group  
                ON  
                   phpbb_users.user_id = phpbb_user_group.user_id  
                SET  
                   -- [...]  
                WHERE  
                   -- [Deine Bedingung]  
                
                

                Dein CROSS JOIN sorgt dafür, dass es für jeden Datensatz in php_users_bck mindestens einen passenden Datensatz in der Tabelle phpbb_user_group gibt, für den Deine WHERE-Klausel nicht passt: infolgedessen werden alle Datensätze aktualisiert. Das ist zu erwarten.

                Freundliche Grüße

                Vinzenz

  2. Hallo,

    Nun möchte ich in Tabelle phpbb_users von allen oben ausgewählten das Feld user_active verändert, auf 0 setzen

    UPDATE   phpbb\_users\_bck
    INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
    WHERE phpbb_user_group.group_id =6617
    SET user_active=0

    geht aber leider nicht !!

    verständlicherweise geht dies nicht. Die Reihenfolge der einzelnen Klauseln ist in SQL genau vorgegeben, siehe MySQL-Handbuch, UPDATE-Syntax.

    Freundliche Grüße

    Vinzenz