【问题标题】:Mysql pdate query errorMysql 更新日期查询错误
【发布时间】:2013-09-30 18:09:28
【问题描述】:

我正在尝试使用Visual Studio 2010 (c#) 更新我的mysql 表“upproj”。 我想执行以下查询:

string Query = " update tlog.upproj set summ=(select sum(grade) from tlog.upproj group by ams having count(*) =2); ";

但我得到错误

"You can't specify target table 'upproj' for update in FROM clause".

当我在 Mysql 查询浏览器上执行上一个查询时,我没有收到任何错误,但我的项目需要从 Visual Studio 执行此查询。

有没有办法解决这个问题?

【问题讨论】:

  • 感谢编辑:)
  • UPDATE 查询的具体目的是什么?如果 起作用,它将更新表中的每一行,因为它没有设置WHERE 子句。
  • 并在类似问题上查看this answer
  • update 的目的是给 summ 列设置值。我通过 Visual Studio 执行此操作,而不是在计数子查询中使用“2”,而是使用在 vs 项目中给出的变量。对不起我的英语不好。

标签: c# mysql visual-studio-2010


【解决方案1】:

正如错误提示,您不能在UPDATE 语句的FROM 子句(在子查询中)中指定要更新的表;如果您尝试在 WHERE 子句中使用它,情况也是如此。

如果你使用JOIN,你可以完成“使用你正在更新的表”的任务。

根据您现有查询推断的架构,ams 字段对于集合分组是唯一的,因此您可以将其添加为子句的一部分。

尝试以下(未经测试):

UPDATE
    tlog.upproj AS u1
    JOIN (SELECT ams, SUM(grade) AS grade_sum FROM tlog.upproj GROUP BY ams HAVING COUNT(*) = 2) AS u2
        ON u1.ams = u2.ams
SET
    summ = u2.grade_sum;

这应该更新ams 的每条记录,并使用相同amsgrade 的总和。如果特定的 ams 没有 2 个条目,则不会更新。

【讨论】:

  • 非常感谢您的回答!你刚刚救了我:D
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2015-08-12
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多