我想更新表中的某些值,但查询需要两个多小时才会继续运行。我的查询有什么明显的错误吗?
UPDATE tblQuestionnaires
SET nAddBy = ( SELECT tblanswers.nolduserid
FROM tblAnswers
WHERE tblanswers.strOldMobileModelQuestionairenumber
= tblQuestionnaires.strQuestionnaireCode
GROUP BY tblanswers.nolduserid ,
tblanswers.strOldMobileModelQuestionairenumber
)
WHERE tblQuestionnaires.nId BETWEEN 610815 AND 614988
答案 0 :(得分:4)
这样做意味着SET子句中的子查询可能正在为每个调查问卷执行。作为一般规则,我喜欢将查询构建为选择,以输出要更新的行的ID,以及您需要的计算值。对于你的情况,它是这样的:
select q.nId,
a.nolduserid
from tblQuestionnaires q
join tblAnswers a on
a.strOldMobileModelQuestionairenumber = q.strQuestionnaireCode
where
q.nId between 610815 and 614988
group by a.nolduserid, q.nId
然后将该查询更改为更新:
update q
set
nAddBy = a.nolduserid
from tblQuestionnaires q
join tblAnswers a on
a.strOldMobileModelQuestionairenumber = q.strQuestionnaireCode
where
q.nId between 610815 and 614988
group by a.nolduserid, q.nId
请注意,我还没有对此进行测试(我没有您的数据),但这应该会有所改善。