如何执行此MySQL更新命令

时间:2014-09-11 01:45:41

标签: mysql sql

我的SQL(没有双关语)相当生疏。我需要根据表B&中数据的组合,在表A 中更新用户的group_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

2 个答案:

答案 0 :(得分:1)

目前,我对MSSQL更熟悉,但我相信这也适用于MySQL。您还没有表明要更新group_id的内容,因此我只是在其中插入了一个随机字符串。如果要将其设置为查询中另一个表的值,您也可以通过执行m.group_id = d.group_id之类的操作来执行此操作:

UPDATE m SET
    m.group_id = 'newValue'
FROM
    exp_members m
    INNER JOIN exp_channel_titles t
        ON m.member_id = t.author_id
    INNER JOIN exp_channel-data d
        ON t.entry_id = d.entry_id
        AND d.field_id_19 LIKE '%[362]%'

如您所见,我已将您的隐式联接更改为显式联接(例如INNER JOIN)。我真的推荐这种语法,因为通过将WHERE条件与JOIN条件分开,可以更容易地看到发生了什么。


更新

看起来MySQL并不支持上面使用的UPDATE...FROM语法。试试这个:

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]%'

同样,这还没有经过测试,但我认为它会起作用。如果没有,它至少可以帮助您更接近您的答案。

答案 1 :(得分:-1)

也许SELECT的UPDATE解决了你的问题...

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