Sql查询永远执行

时间:2014-08-14 07:13:02

标签: sql performance oracle sql-in

以下是我正在尝试执行的查询,它将永远执行。

SELECT DISTINCT (CLN_CLNDR_DT)FROM CLN_CLNDR CLN,
SYG_SYSTEM_GLOBALS SYG,CTD_CSH_TRNSCTN_DTLS CTD WHERE CLN.CLN_BP_ID = SYG.SYG_BP_ID AND CLN.CLN_ENTITY_ID = CTD.CTD_ENTITY_ID AND CLN_DT_SEQ_NUM  
IN 
 (SELECT DISTINCT (CLN1.CLN_DT_SEQ_NUM) 
 FROM CLN_CLNDR CLN1,
 SBD_SYS_BSNS_DTS SBD,
 SYG_SYSTEM_GLOBALS SYG,
 CTD_CSH_TRNSCTN_DTLS CTR
WHERE SBD.SBD_BSNS_DT  = CLN1.CLN_CLNDR_DT
AND CLN1.OU_ID         = SBD.OU_ID
AND CLN1.CLN_BP_ID     = SYG.SYG_BP_ID
AND CLN1.CLN_ENTITY_ID = CTR.CTD_ENTITY_ID
);

当我尝试仅在 中运行查询时,它很容易将结果返回为 (522,470,419,417,553,582,305,361)

SELECT DISTINCT (CLN1.CLN_DT_SEQ_NUM) 
 FROM CLN_CLNDR CLN1,
 SBD_SYS_BSNS_DTS SBD,
 SYG_SYSTEM_GLOBALS SYG,
 CTD_CSH_TRNSCTN_DTLS CTR
WHERE SBD.SBD_BSNS_DT  = CLN1.CLN_CLNDR_DT
AND CLN1.OU_ID         = SBD.OU_ID
AND CLN1.CLN_BP_ID     = SYG.SYG_BP_ID
AND CLN1.CLN_ENTITY_ID = CTR.CTD_ENTITY_ID;

此外,当我尝试直接执行完整查询时,替换 块中的查询 内部查询的结果是(522,470,419,417,553,582,305,361),

工作正常。

由于我是新手,我不知道发生了什么。 请帮帮我。

1 个答案:

答案 0 :(得分:0)

我认为您不需要子查询中的所有表,因为您已经在使用它们来过滤外部查询中的行。试试这个:

SELECT DISTINCT (CLN_CLNDR_DT)
FROM CLN_CLNDR CLN,
SYG_SYSTEM_GLOBALS SYG,
CTD_CSH_TRNSCTN_DTLS CTD 
WHERE CLN.CLN_BP_ID = SYG.SYG_BP_ID 
AND CLN.CLN_ENTITY_ID = CTD.CTD_ENTITY_ID 
AND CLN_DT_SEQ_NUM  
IN 
 (SELECT DISTINCT (CLN1.CLN_DT_SEQ_NUM) 
 FROM CLN_CLNDR CLN1,
 SBD_SYS_BSNS_DTS SBD,
WHERE SBD.SBD_BSNS_DT  = CLN1.CLN_CLNDR_DT
AND CLN1.OU_ID         = SBD.OU_ID
);