MySQL:使用子查询中的Where子句进行更新

时间:2017-02-06 10:57:06

标签: mysql sql-update subquery

我曾经知道如何做到这一点,但缺乏练习让我失去了它。

我正在尝试通过比较另一个中的匹配电子邮件来更新表中的用户名。 基本上第一个表的用户名为空,而另一个表填充了用户名和电子邮件。 这是我的错误查询:

UPDATE users SET username = (SELECT Username FROM clients WHERE email in mail)

电子邮件来自我的客户表,邮件来自我的用户表

2 个答案:

答案 0 :(得分:1)

我建议使用JOIN和UPDATE进行更新,这样的事情应该起作用

UPDATE users 
    INNER JOIN
    #your relationship / for example
    clients ON (users.id = clients.user_id) 
SET 
    users.username = clients.email
WHERE
    users.username IS NULL

确保ON子句与用户和客户端之间存在正确的关系,并且应该使用来自客户端的电子邮件更新用户用户名栏中的所有记录

答案 1 :(得分:0)

您没有提供足够的信息来获得明确的答案。

如果未在UPDATE语句中设置WHERE子句,则将更新具有相同值的所有记录,这可能不是您想要的

如果您要使用客户端表中匹配记录的某些信息更新用户表,则需要加入这两个表在你的匹配领域。像这样:

UPDATE users U, clients C
SET u.username = c.username
WHERE U.email=C.email
AND C.email IN (...)

在此示例中,我假设电子邮件地址是2个表之间的匹配字段(您应该对此进行调整),并且您提供了目标电子邮件地址列表(您可以删除它)