我有以下更新查询来设置一些值并控制数据流。但是当我执行下面的查询时,我从condtion(子查询)中得到错误“Too many values”。
UPDATE MTB ----- TABLE NAME
SET MTB_EXTR_FLAG='N',
MTB_ALOC_PROCESS='DC1'
WHERE MTB_I IN --- PRIMARY KEY
(
SELECT * FROM
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN
FROM MTB
)
WHERE RN BETWEEN 100 AND 500
)
这里我的意图是为每个处理一个作业选择不同的设置数据。 我想在每次运行具有不同数据集的作业之前设置MTB_EXTR_FLAG ='N',MTB_ALOC_PROCESS ='DC1'。
有人可以帮我解决错误问题或提出不同的查询。
谢谢。
答案 0 :(得分:1)
我认为这只是列数不匹配的问题(2 - MTB_I
和RN
- 而不是1 - MTB_I
):
UPDATE MTB
SET MTB_EXTR_FLAG='N',
MTB_ALOC_PROCESS='DC1'
WHERE MTB_I IN --- PRIMARY KEY
(
SELECT MTB_I FROM -- Else RN will be taken !!
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN
FROM MTB
)
WHERE RN BETWEEN 100 AND 500
)
您不能使用子查询返回比预期更多的字段来where x in (...)
。