无法从下一条记录Error 1093

时间:2018-10-26 20:57:31

标签: mysql next mysql-error-1093

我需要使用下一条记录的数据(根据增量gkey字段)来更新日期错误(1970-01-01)的表的记录。

因此,如果我执行此查询:

SELECT aa.gkey,
       aa.course_date,
       (select course_date from BI.fact_training_event_tbl bb where bb.gkey = (
            select min(cc.gkey) 
            from BI.fact_training_event_tbl cc 
                 where cc.gkey > aa.gkey)) as next_date
from BI.fact_training_event_tbl aa
where course_date = '1970-01-01'

它按预期正确地带来了记录:

gkey   course_date  next_date
====   ===========  =========
4103   1970-01-01   2017-03-23
4884   1970-01-01   2017-03-22
5047   1970-01-01   2017-03-23

我现在需要使用next_date更新course_date字段,但是如果我尝试运行以下内容,则会得到

  

错误代码1093。您无法在FROM子句中指定要更新的目标表'aa':

update BI.fact_training_event_tbl aa
    set course_date =
    (select course_date from BI.fact_training_event_tbl bb where bb.gkey = (
            select min(cc.gkey)
    from BI.fact_training_event_tbl cc
         where cc.gkey > aa.gkey))
where course_date = '1970-01-01'

关于如何实现此目标的任何想法?

我想明确指出,由于有关错误1093的线程显示了一个简单的子查询,因此未早回答此问题。就我而言,我正在查找引用主表的下一条记录。请不要将其标记为重复项。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用表名代替别名,因为内部子查询不知道别名aa

update BI.fact_training_event_tbl
set course_date =
    (
    select course_date 
    from BI.fact_training_event_tbl bb 
    where bb.gkey = 
        ( 
            select min(cc.gkey)
            from BI.fact_training_event_tbl cc
            where cc.gkey > BI.fact_training_event_tbl.gkey
        )
    )
where course_date = '1970-01-01'