Mysql嵌套子查询未知列错误

标签 mysql sql subquery

我有一个相当大的查询,其中有 2 个子查询。我的大查询更新了整个 E 列。 该表如下所示:

--------------------------
id  | A      | B    | E  |
--------------------------
1   |  NULL  | NULL |NULL|
--------------------------
2   |  4     | 6    |NULL|
--------------------------
3   |  6     | 9    |NULL|
--------------------------

这是我的整个查询:

 Update mydatabase.mytable  ,
    (SELECT t1.A/AVG(t2.A)
    FROM    mytable t1
    JOIN    mytable t2
    ON      t2.id <= t1.id
    group by t1.id ) AS C,
    (SELECT t1.B/AVG(t2.B)
    FROM    mytable t1
    JOIN    mytable t2
    ON      t2.id <= t1.id
    group by t1.id ) AS D
    SET E = (C+D)/2;

我收到错误:Unknown column 'C' in 'field list'

相信我也会在 D 中遇到同样的错误。

我的子查询有效并且语法正确。我只是不确定大查询和更新部分。

谢谢


编辑: 我如何编辑上面查询的 ON 子句部分,以便我希望当前代码在 id<=14(即 t2.id <= t1.id,如上所示)的位置工作当t1 id =14时,t2就是现在从1到14的所有累积id。

but 对于 id >14 我希望 ON 子句为 (t2.id=t1.id>=t1.id-2 and <=t1.id) 所以当t1 id=15时,t2.id应该在13到15之间。 当t1 id = 16时,t2.id应在14和16之间,依此类推。

这是因为当我在 id=14 之后计算 ids 的列 E 时,我只对获取移动平均值上 C 和 D 的前 2 行的平均值感兴趣。

最佳答案

您可以仅使用单个联接重写查询,无需使用条件进行附加联接来计算另一个值

Update t  join 
    (SELECT t1.A/AVG(t2.A) C ,t1.B/AVG(t2.B) D
    FROM    t t1
    JOIN    t t2
    ON      t2.id <= t1.id
    group by t1.id ) AS tt
    SET E = (tt.C + tt.D)/2;

Demo

编辑空值

Update t  join 
    (SELECT t1.id ,ifnull(t1.A/AVG(t2.A),0) C ,ifnull(t1.B/AVG(t2.B),0) D
    FROM    t t1
    JOIN    t t2
    ON      t2.id <= t1.id
    group by t1.id ) AS tt
    on(t.id = tt.id)
    SET E = (tt.C + tt.D)/2;

Demo

关于Mysql嵌套子查询未知列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23776302/

相关文章:

MySQL:对太长而无法索引的列进行高效查询

mysql - 如何使用子查询显示从未分配给不同表的列?

php - 使用 QuickPHP 运行 MySQL

php - 检索类似的查询

php - 根据数据库中的值从 1 更改为 5

sql - Powershell 使用文件? "being used by another process"

php - UPDATE 中的 CASE 用于选择列

mysql - 限制子查询而不限制整个查询

mysql - MySQL Count子查询

php - CakePhp 2.5 $belongsTo 有两个模型