Vinzenz Mai: Aktionsabfrage mit update und join bzw. inner join

Beitrag lesen

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