2012-03-31 9 views
7

Betrachten Sie die folgenden Tabellen: „Benutzer“ und „Tweets“Wie verbinde ich zwei Tabellen in einer UPDATE-Anweisung?

user_id name    tweet_id user_id tweet  spam 
-----------------  ---------------------------------- 
1  SUSPENDED  1  1  lorem ipsum 0 
2  foo    2  1  dolor  0 
3  bar    3  2  samet  0 
4  SUSPENDED  4  1  stunitas  0 
         5  3  hello  0 
         6  4  spamzz!  0 

ich durch die „Tweets“ Tabelle aktualisieren möchten Kennzeichnung aller von Gesperrte Nutzer aus Tweets, als Spam. Also im obigen Beispiel würden Tweets mit tweet_id 1, 2, 4 und 6 als Spam markiert werden, indem der "spam" -Wert von 0 auf 1 aktualisiert wird.

Ich habe Probleme beim Verbinden der beiden Tabellen. Bisher habe ich nur in SELECT-Anweisungen zu verbinden hatte, aber dies scheint problematischer:

UPDATE tweets SET spam = 1 WHERE tweets.user_id = users.user_id 
AND users.name = 'SUSPENDED' 

Diese sicherlich nicht funktioniert ..., der mich in die richtige Richtung zeigen könnte?

Antwort

20

Sie sind auf dem richtigen Weg, aber man braucht ein JOIN zwischen den Tabellen zu spezifizieren:

UPDATE tweets JOIN users ON tweets.user_id = users.user_id 
    SET tweets.spam = 1 
WHERE users.name = 'SUSPENDED' 
+0

Danke! Und wenn ich nur alle Tweets anzeigen möchte, die von gesperrten Konten erstellt wurden? Ich versuche SELECT Tweets.tweet JOIN Benutzer ON tweets.user_id = users.user_id WHERE users.name = 'SUSPENDED', aber ich bekomme einen Fehler? "Fehler bei JOIN prüfen". Gilt nicht die gleiche Konvention für SELECT-Anweisungen? – Pr0no

+1

@Reveller Sie haben Ihre 'FROM' vergessen:' SELECT Tweet FROM Tweets JOIN Benutzer ON tweets.user_id = Benutzer.user_id WHERE users.name = 'SUSPENDED'' –

+0

@Michael Berkowski Ich habe diese Art von Abfrage versucht. Aber wenn die Aufzeichnungen 30k überschreiten, stoppt der Boundary Server. Gibt es eine andere Lösung? –

2

Dies sollte es tun:

UPDATE tweets 
INNER JOIN users ON (users.user_id = tweets.user_id) 
SET spam=1 
WHERE users.name='SUSPENDED' 

Sie verwenden in der Regel können JOIN derselben in ein UPDATE wie Sie in einem SELECT können. In einem UPDATE wären Sie nicht in der Lage, eine Tabelle mit sich selbst zu verbinden, und es gibt noch andere kleine Macken, aber für grundlegende Dinge wie diese wird es funktionieren, wie Sie es erwarten würden.

0

Sie haben mit der Beantwortung der Frage begonnen, bevor Sie den Typ des Servers, den Sie verwenden, überprüfen. Ich weiß, das funktioniert in MS SQL Server. Ich bin mir über MySQL jedoch nicht sicher. Haben Sie MySQL nicht installiert, probieren Sie es aus.

UPDATE tweets SET 
    spam = 1 
FROM tweets INNER JOIN users ON users.user_id = tweets.user_id 
WHERE users.name = 'SUSPENDED'