【问题标题】:Update table with an alias on where clause [duplicate]在 where 子句上使用别名更新表 [重复]
【发布时间】:2018-06-22 03:50:48
【问题描述】:

我需要一些关于更新声明的帮助。我有以下查询

  update totals
  set contacts = (SELECT 
      COUNT(*)
        FROM contact_events c
        JOIN users u
        ON c.user = u.id 
        GROUP BY c.user)
  where c.user = ext_id;

但是当我运行它时,我得到“where 子句中的未知列 c.user”。

但是,我似乎无法在该连接上应用别名,所以我一定是在语法上做错了。

【问题讨论】:

  • 别名 c 在您的子查询中,因此它在您的主查询中脱离上下文。对于括号内使用的别名仅在括号内使用的子查询,情况总是如此。您的查询需要重写,以便为引用另一个表的 UPDATE 语句使用正确的语法。
  • 谢谢,我找不到另一个问题,但看起来很完美

标签: mysql


【解决方案1】:

你必须使用JOIN来执行这样的操作

UPDATE totals t
INNER JOIN (SELECT c.user, 
                COUNT(*) tot
            FROM contact_events c
        JOIN users u ON c.user = u.id GROUP BY c.user) u ON u.user = t.ext_id
SET t.contacts = u.tot

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多