如何执行这个MySQL更新命令

如何执行这个MySQL更新命令,mysql,sql,Mysql,Sql,我的SQL非双关语相当生疏。我需要根据表B和表C中的数据组合更新表A中用户的组id。有人能给我一些建议吗 下面是SELECT语句的外观: SELECT group_id FROM exp_channel_data d, exp_channel_titles t, exp_members m WHERE d.field_id_19 LIKE '%[362]%' AND t.entry_id = d.entry_id AND t.author_id = m.memb

我的SQL非双关语相当生疏。我需要根据表B和表C中的数据组合更新表A中用户的组id。有人能给我一些建议吗

下面是SELECT语句的外观:

SELECT group_id
    FROM exp_channel_data d, exp_channel_titles t, exp_members m
    WHERE d.field_id_19 LIKE  '%[362]%'
    AND t.entry_id = d.entry_id
    AND t.author_id = m.member_id

也许从选择更新可以解决您的问题

 UPDATE TABLE 
 SET group_id = (SELECT group_id FROM ...)
 WHERE group_id = <your_criteria>

目前,我对MSSQL更为熟悉,但我相信这在MySQL中也适用。您还没有指明要将组id更新为什么,所以我只是在其中插入了一个随机字符串。如果要将其设置为查询中另一个表中的值,也可以执行类似于m.group\u id=d.group\u id的操作:

如您所见,我已将隐式连接更改为显式连接,例如内部连接。我真的建议使用这种语法,因为通过将WHERE条件与JOIN条件分开,更容易看到发生了什么

更新: 从上面使用的语法来看,MySQL似乎不支持更新。请尝试以下方法:

UPDATE
    exp_members m,
    exp_channel_titles t,
    exp_channel_data d
SET
    m.group_id = 'newValue'
WHERE
    m.member_id = t.author_id
    AND t.entry_id = d.entry_id
    AND d.field_id_19 LIKE '%[362]%'

再说一次,这是没有测试,但我认为它会工作。如果没有,它至少可以帮助您更接近您的答案。

运行更新声明?您好,谢谢您的帖子。我运行了查询,但它抛出了以下错误:1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第3行“FROM exp_members m INNER JOIN exp_channel_titles t ON m.membe”附近使用的正确语法。有什么想法吗?@user1684180:Hmm,看起来MySQL不允许更新…从语法上看。因此,它看起来可能必须使用隐式联接来完成,就像以前一样。我会更新我的答案。
UPDATE
    exp_members m,
    exp_channel_titles t,
    exp_channel_data d
SET
    m.group_id = 'newValue'
WHERE
    m.member_id = t.author_id
    AND t.entry_id = d.entry_id
    AND d.field_id_19 LIKE '%[362]%'