请考虑以下表格:“用户”和“推文”
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'
这肯定不起作用......谁能指出我正确的方向?
答案 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
之间的关系必须仔细维护。