0 0

ORACLE更新语句。0

有一个oracle更新语句是这样的:
UPDATE SH_INTERNAL_SUB_DEPT DP SET DP.UNCONFORM_COUNT = (SELECT COUNT(*)
FROM SH_INTERNAL_SUB_STANDARD SD WHERE SD.INTERNAL_GROUP_ID = 28 
AND SD.CONFORM_FLAG =1 
)
WHERE DP.DEPT_ID = (SELECT TM.AUDIT_DEPARTMENT_ID FROM SH_INTERNAL_SUB_TEAM TM 
WHERE TM.INTERNAL_GROUP_ID = 28) 
AND DP.INTERNAL_PLA(SELECT TM.INTERNAL_PLAN_ID FROM SH_INTERNAL_SUB_TEAM TM 
WHERE TM.INTERNAL_GROUP_ID = 28 )

请问一下,该怎么优化一下,去掉这么多的子查询语句。
2013年7月05日 15:31

4个答案 按时间排序 按投票排序

0 0

UPDATE SH_INTERNAL_SUB_DEPT DP,SH_INTERNAL_SUB_TEAM TM

SET DP.UNCONFORM_COUNT = (
SELECT COUNT(1)

FROM SH_INTERNAL_SUB_STANDARD SD
WHERE SD.INTERNAL_GROUP_ID = 28  
AND SD.CONFORM_FLAG =1  
    ) 
    WHERE DP.DEPT_ID = TM.AUDIT_DEPARTMENT_ID
AND TM.INTERNAL_GROUP_ID = 28

2013年7月05日 16:54
0 0

你少写了一个等号吧。
UPDATE SH_INTERNAL_SUB_DEPT DP
SET DP.UNCONFORM_COUNT
= (
   SELECT COUNT(*)  

   FROM SH_INTERNAL_SUB_STANDARD SD

   WHERE SD.INTERNAL_GROUP_ID = 28
  
   AND SD.CONFORM_FLAG =1   
  )  
WHERE EXISTS(
SELECT 1 FROM SH_INTERNAL_SUB_TEAM TM
WHERE TM.INTERNAL_GROUP_ID = 28
AND DP.DEPT_ID = TM.AUDIT_DEPARTMENT_ID
AND DP.INTERNAL_PLA = TM.INTERNAL_PLAN_ID
)
;

2013年7月05日 16:05
0 0

AND DP.INTERNAL_PLA(SELECT TM.INTERNAL_PLAN_ID FROM SH_INTERNAL_SUB_TEAM TM   
WHERE TM.INTERNAL_GROUP_ID = 28 )这句少个'='或者'IN'吧。
单从语句上很难优化了,如果数据量很大的话,可以拆分写个过程。

2013年7月05日 16:01
0 0

你这SQL更新能正确?

2013年7月05日 15:36

相关推荐

Global site tag (gtag.js) - Google Analytics