Mysql嵌套子查询未知列错误

Posted

技术标签:

【中文标题】Mysql嵌套子查询未知列错误【英文标题】:Mysql Nested sub queries unknown column error 【发布时间】:2014-05-21 07:09:31 【问题描述】:

我有一个相当大的查询,其中包含 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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

嗯,我的 col E 仍然是 NULL 这里是小提琴链接,对不起,我的第一行实际上都是 NULL。 sqlfiddle.com/#!2/33b7a/1 @jenn 看到我更新的答案和更新的demo 是的,您可以将其保留为 null as here 我想这就是您要问的?

以上是关于Mysql嵌套子查询未知列错误的主要内容,如果未能解决你的问题,请参考以下文章

子查询(嵌套子查询)

求SQL相关子查询和嵌套子查询通俗的区别 ?

Oracle 单行子查询在使用嵌套子查询时返回多行

mysql怎么在查询中嵌套子查询

SQL相关子查询和嵌套子查询的区别

相关子查询 与 嵌套子查询 有何区别 ?