2012-03-31 26 views
7

considerar las siguientes tablas: "usuarios" y "tweets"¿Cómo unir dos tablas en una instrucción UPDATE?

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 

Quiero actualizar la "tuits" mesa marcando todos los tweets realizados por los usuarios suspendidos, como correo no deseado. Por lo tanto, en el ejemplo anterior, los tweets con tweet_id 1, 2, 4 y 6 se marcarán como spam actualizando el valor "spam" de 0 a 1.

Tengo problemas para unir las dos tablas. Hasta ahora, sólo he tenido a participar en las instrucciones SELECT, pero esto parece más problemático:

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

Sin duda, esto no está funcionando ... que me podría apuntar en la dirección correcta?

Respuesta

20

Estás en el camino correcto, pero hay que especificar un JOIN entre las tablas:

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

Gracias! ¿Y si solo quiero ver todos los tweets realizados por cuentas suspendidas? Estoy intentando SELECCIONAR tweets.tweet ÚNETE a usuarios EN tweets.user_id = users.user_id WHERE users.name = 'SUSPENDED' pero me sale un error? "Comprobar error en JOIN". ¿No es la misma convención para las declaraciones SELECT? – Pr0no

+1

@Reveller has olvidado tu 'FROM':' SELECT tweet FROM tweets ÚNETE a los usuarios ON tweets.user_id = users.user_id WHERE users.name = 'SUSPENDED'' –

+0

@Michael Berkowski He intentado este tipo de consulta. Pero cuando los registros llegan a 30k el servidor Boundary se detiene. hay alguna otra solucion? –

2

Esto debe hacerlo:

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

general, usted puede utilizar el mismo en JOIN un UPDATE como puedas en un SELECT. No podría unirse a una mesa en sí mismo en un UPDATE, y hay algunas otras pequeñas peculiaridades, pero para cosas básicas como esta funcionará como era de esperar.

0

Comenzó a responder antes de verificar el tipo de servidor que está utilizando. Sé que esto funciona en MS SQL Server. No estoy seguro acerca de MySQL sin embargo. No tiene instalado MySQL así que pruébelo.

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