如何在select之外使用动态内部列

时间:2012-08-30 12:38:48

标签: mysql

我有这个查询,我在mysql中得到错误

错误代码:1054。“字段列表”中的未知列'calc_diff_free'

我理解这个问题,但是如何在不改变太多的情况下使用此列

我过滤了查询以隐藏一些数据并帮助您更好地阅读查询

insert into ranking_1 (difference_free)
(
 select 
 f.ranking, rc.ranking,
(-1*(f.ranking-rc.ranking)) as calc_diff_free
     from base_testing.ranking_temp f
     left join ranking_1 rc
     on f.id=rc.id
     where 1
 ) 
on duplicate key update difference_free=calc_diff_free

感谢您的帮助!!

3 个答案:

答案 0 :(得分:1)

查询中的on duplicate key update子句超出了声明列calc_diff_free的select项的范围。

您可能需要重新设置查询以将其置于范围内。

答案 1 :(得分:1)

尝试这样的事情,

insert into ranking_1 (difference_free)
select -1 * (f.ranking-rc.ranking) as calc_diff_free
from base_testing.ranking_temp f
            left join ranking_1 rc
                    on f.id=rc.id
on duplicate key update difference_free = calc_diff_free

点:您的insertselect子句中的列数必须相等。

答案 2 :(得分:0)

我认为我设法让它发挥作用......

insert into ranking_1 (difference_free)
(
 select 
 f.ranking, rc.ranking,
 (-1 * (f.ranking-rc.ranking)) calc_diff_free
     from base_testing.ranking_temp f
     left join ranking_1 rc
     on f.id=rc.id
     where 1
 ) 
on duplicate key update difference_free=-1*(f.ranking-rc.ranking)

但它给了我一些警告......

85672行受影响,记录:42883,重复:42789,警告:4