如何将UPDATE查询与子查询结合起来?

时间:2017-11-13 14:35:15

标签: mysql sql subquery

在我的Mysql数据库中,我想为使用此select语句找到的所有记录更新字段fup

SELECT ic.hash
FROM incompany as ic, app
WHERE ic.id = app.ic_id;

所以我创建了以下组合查询:

UPDATE incompany
SET fup = 'x' 
WHERE hash IN (SELECT ic.hash
FROM incompany as ic, app
WHERE ic.id = app.ic_id);

但是这个查询给了我以下错误:

  

您无法指定目标表' incompany'用于FROM子句中的更新

有人知道如何让这项工作成功吗?欢迎所有提示!

2 个答案:

答案 0 :(得分:2)

你似乎想要两列的条件,所以这有点棘手。如果我正确地遵循逻辑:

UPDATE incompany ic JOIN
       (SELECT DISTINCT ic.hash
        FROM incompany ic JOIN
             app
             ON ic.id = app.ic_id 
       ) ica
       ON ica.hash = ic.hash
    SET fup = 'x' ;

答案 1 :(得分:1)

您不需要子查询。您可以使用INNER JOIN来设置将incompany表与app表以及incompany表的另一个别名相关联的条件。

UPDATE incompany I 
INNER JOIN app A ON I.id = A.ic_id
INNER JOIN incompany I2 ON I.hash = I2.hash
SET I.fup = 'x'