2016-09-16 4 views
1
UPDATE newsreactions 
SET newsreactions.enabled = '0' 
FROM newsreactions 
INNER JOIN users ON newsreactions.memberId = users.id 
WHERE users.active = '0' AND users.comment LIKE '%spam%' 

Aus irgendeinem Grund bin ich einen Syntaxfehler bekommen:SQL-Update mit Inner Join und wo

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 'FROM newsreactions INNER JOIN users ON newsreactions.memberId = users.id WHERE u' at line 3

Kann es allerdings nicht herausfinden. Wenn ich die update und set durch eine select ersetzen, funktioniert es gut.

+3

Tag Ihre Frage mit der Datenbank Sie verwenden. –

+0

Syntax für MySQL Multi-Tabelle UPDATE-Anweisung ist hier verfügbar: http://dev.mysql.com/doc/refman/5.6/en/update.html – spencer7593

Antwort

2

Fehler 1064 ist ein MySQL-Syntaxfehler. Die richtige MySQL Syntax:

UPDATE newsreactions nr INNER JOIN 
     users u 
     ON nr.memberId = u.id 
    SET nr.enabled = 0 
WHERE u.active = 0 AND u.comment LIKE '%spam%'; 

Hinweise:

  • Die JOIN in der UPDATE Klausel geht.
  • Tabellenaliasnamen erleichtern das Schreiben und Lesen der Abfrage.
  • Ich vermute, dass enabled und active sind wirklich numerische Werte. Wenn ja, verwenden Sie keine einfachen Anführungszeichen.
+0

Thx! Ich habe die Antwort auf diese Frage verwendet: http://stackoverflow.com/questions/9588423/sql-server-inner-join-when-updating Wie unterscheidet sich meine Frage davon? –

+1

@PascalClaes: Diese andere Frage betrifft Microsoft SQL Server, nicht MySQL. Das sind verschiedene DBMS, und es gibt einige signifikante Unterschiede in der SQL-Syntax. Die UPDATE-Syntax für mehrere Tabellen ist ein Beispiel für einen dieser Unterschiede. Das ist ein wichtiger Grund, warum es wichtig ist, zu ermitteln, welche Datenbank Sie verwenden (fragen Sie nach). – spencer7593

1

Die join Klausel kommen sollte vor der set Klausel, und es sollte keine from Klausel in MySQL sein:

UPDATE newsreactions 
JOIN users ON newsreactions.memberId = users.id 
SET newsreactions.enabled = '0' 
WHERE users.active = '0' AND users.comment LIKE '%spam%'