Mysql 如何在UPDATE语句中联接两个表?
考虑下表:“用户”和“推文” 我想更新“tweets”表,将暂停用户发出的所有tweets标记为垃圾邮件。因此,在上面的示例中,通过将“spam”值从0更新为1,tweet_id为1、2、4和6的tweet将被标记为spam 我很难把这两张桌子合在一起。到目前为止,我只需要加入SELECT语句,但这似乎更麻烦:Mysql 如何在UPDATE语句中联接两个表?,mysql,sql,Mysql,Sql,考虑下表:“用户”和“推文” 我想更新“tweets”表,将暂停用户发出的所有tweets标记为垃圾邮件。因此,在上面的示例中,通过将“spam”值从0更新为1,tweet_id为1、2、4和6的tweet将被标记为spam 我很难把这两张桌子合在一起。到目前为止,我只需要加入SELECT语句,但这似乎更麻烦: UPDATE tweets SET spam = 1 WHERE tweets.user_id = users.user_id AND users.name = 'SUSPENDED'
UPDATE tweets SET spam = 1 WHERE tweets.user_id = users.user_id
AND users.name = 'SUSPENDED'
这肯定不起作用……谁能给我指出正确的方向?您走的方向是正确的,但您需要在表之间指定一个连接:
UPDATE tweets JOIN users ON tweets.user_id = users.user_id
SET tweets.spam = 1
WHERE users.name = 'SUSPENDED'
这应该做到:
UPDATE tweets
INNER JOIN users ON (users.user_id = tweets.user_id)
SET spam=1
WHERE users.name='SUSPENDED'
通常,您可以在
更新中使用与在选择中相同的加入
。在更新中,您将无法将一个表连接到它本身,并且还有一些其他的小怪癖,但是对于像这样的基本内容,它将如您所期望的那样工作。在验证您使用的服务器类型之前开始回答。我知道这在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个表,需要将一个表中的一列更新为另一个表中的一列。有几种方法可以做到这一点。
例如,请查看此查询
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);
必须小心维护表之间的关系。谢谢!如果我想查看所有被暂停账户的推文?我正在尝试选择tweets.tweet加入tweets上的用户。user\u id=users.user\u id WHERE users.name='SUSPENDED',但我收到一个错误?“连接时检查错误”。SELECT语句不也是这样吗?@Reveller你忘记了你的,从推文中选择推文加入推文用户。user\u id=users.user\u id WHERE users.name='SUSPENDED'
@Michael Berkowski我尝试过这种查询。但当记录达到30k边界时,服务器停止。还有其他解决方案吗?@BhavinChauhan您可能在连接的列上没有索引。确保它们都有索引或外键关系。@Michael Berkowski是的,谢谢你的评论,我试着添加主键,效果很好:)测试了50万条记录。
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);