我有一个要求,我们需要形成一个动态SQL查询,它将具有100 OR条件,如下所示.in子句中的参数数量可以从1到50。 所有参数都来自UI。
GK_QUEUE中的记录数量= 1,00,000并且将来会增加(每天200条记录)。 Process_type和Process_category中的记录数为60个静态行。 区号中没有4个值
是否有更好的方法来处理此问题,而不是使用or和in条件进行大型查询。
SELECT *
FROM GK_queue UQ
INNER JOIN PROCESS_TYPE WPT ON WPT.ID_PROCESS_TYPE = UQ.ID_PROCESS_TYPE
INNER JOIN PROCESS_CATEGORY WPTC ON WPTC.ID_PROCESS_CATEGORY = WPT.ID_PROCESS_CATEGORY
AND UQ.REGION_CODE IN (:regions)
OR (UQ.CURRENT_TYPE = 'G-D-CHL-TSD-PND-APPRV' and UQ.xu in ('GH','IN'))
OR (UQ.CURRENT_TYPE = 'G-D-CHL-TSD-PND-NTFY-AMR' and UQ.xu in (' SH7',' SHB',' SHE',' SSZ',' SZN',' TBI',' TH1',' TW1',' VNB',' VSE'))
OR (UQ.CURRENT_TYPE = 'G-D-CHL-TSD-SEND-NOTICE' and UQ.xu in ('051',' 273',' 494',' 601',' 604',' 616',' 645',' 650',' 671'))
OR (UQ.CURRENT_TYPE = 'G-D-PRNT-G-REW-NOTFY' and UQ.xu in (' 770',' 877',' 931',' 937',' APC',' AUS',' BJ1',' BJB',' CNY',' HK1',' ID2'))
OR (UQ.CURRENT_TYPE = 'G-D-PRNT-TSD-D-COMPLETE' and UQ.xu in (' BJ1',' BJB',' CNY',' HK1',' ID2',' IN9',' ISE',' JPN',' KR1',' ML7',' MY1'))
OR (UQ.CURRENT_TYPE = 'G-D-PRNT-TSD-IP' and UQ.xu in (' PH2',' PR8',' SCD',' SDL',' SG1',' SGZ',' SH7',' SHB',' SHE',' SSZ',' SZN',' TBI'))