我需要使用下一条记录的数据(根据增量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的线程显示了一个简单的子查询,因此未早回答此问题。就我而言,我正在查找引用主表的下一条记录。请不要将其标记为重复项。
答案 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'