如何在UPDATE语句中连接两个表?

时间:2012-03-31 15:25:52

标签: mysql sql

请考虑以下表格:“用户”和“推文”

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

我想通过将SUSPENDED用户发布的所有推文标记为垃圾邮件来更新“推文”表。因此,在上面的示例中,通过将“垃圾邮件”值从0更新为1,将tweet_id 1,2,4和6的推文标记为垃圾邮件。

我在加入这两张桌子时遇到了麻烦。到现在为止,我只需要加入SELECT语句,但这似乎更麻烦:

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

这肯定不起作用......谁能指出我正确的方向?

4 个答案:

答案 0 :(得分:23)

您走在正确的轨道上,但您需要在表格之间指定JOIN

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

答案 1 :(得分:2)

这应该这样做:

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

JOIN中的UPDATE通常可以SELECT使用UPDATE。你无法在{{1}}中加入一张桌子,还有一些其他的小怪癖,但对于像这样的基本内容,它会像你期望的那样工作。

答案 2 :(得分:0)

在验证您使用的服务器类型之前开始回答。我知道这适用于MS SQL Server。但我不确定MySQL。没有安装MySQL,所以试一试。

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

答案 3 :(得分:-1)

假设您有3个表,并且需要用一个table中的一个更新table中的一列。有几种方法可以做到这一点。 例如,请查看此query

update Table1 T1, Table2 T2, Table3 T3 set T1.field_name = T3.field_name where (T1.field_name = T2.field_user_name) and (T2.field_id = T3.entity_id);

tables之间的关系必须仔细维护。