语句示例
SELECT COUNT(1) FROM(SELECT T.CUSTOMERCODE,T.CUSTOMERNAME,T.RECSTS,T.INDATTRODE,T.COUNTRYCODE,T.SAFECODE,T.REGIONCODE,T.ECONTYPECODEFROM WHJH.TBL_CODECUSTOMER_NEW T WHERET.BATCHNO>=(SELECT BATCHNO FROM WHJH.TBL DATAFILE_MAKE_BATCHNO) -6 ) A
WHERE
A.CUSTOMERNAME IS NULL
OR A.RECSTS IS NULL
OR A.INDATTRCODE IS NULL
OR NOT EXISTS (SELECT 1 FROM WHJH.TBL_CODECOUNTRM WHERE A.COUNTRYCODE=COUNTRYCODE)
OR NOT EXISTS (SELECT 1 FROM WHOH.TL CODESAFE WHERE A.SAFECODE=SAFECODE)
OR NOT EXISTS (SELECT 1 FROM WHJH.TBL.CODEREGION WHERE A.REGIONCODE=REGIONCODE)
OR NOT EXISTS (SELECT 1 FROM WHJH.CODEECONTYPE WHERE A.ECONTYPECODE=ECONTYPECODE)
语句解读
1、优化目标集合
将条件查询出来的结果集作为新的结果集,用以作为下一步数据筛选的目标集。减少了全表扫描,提升了查询速度。
//改进前
SELECT T.CUSTOMERCODE,T.CUSTOMERNAME,T.RECSTS,T.INDATTRODE,T.COUNTRYCODE,T.SAFECODE,T.REGIONCODE,T.ECONTYPECODE
FROM WHJH.TBL_CODECUSTOMER_NEW T
WHERE
T.BATCHNO>=(SELECT BATCHNO FROM WHJH.TBL DATAFILE_MAKE_BATCHNO) -6
AND '子查询'...//改进后
SELECT COUNT(1) FROM(SELECT T.CUSTOMERCODE,T.CUSTOMERNAME,T.RECSTS,T.INDATTRODE,T.COUNTRYCODE,T.SAFECODE,T.REGIONCODE,T.ECONTYPECODEFROM WHJH.TBL_CODECUSTOMER_NEW T WHERET.BATCHNO>=(SELECT BATCHNO FROM WHJH.TBL DATAFILE_MAKE_BATCHNO) -6 ) A
WHERE
'子查询'
AND '子查询'...
2、exists字句注意
例句中的相关语句为:
NOT EXISTS (SELECT 1 FROM WHJH.TBL_CODECOUNTRM WHERE A.COUNTRYCODE=COUNTRYCODE)
解读1:之所以,SELECT 1,是因为EXISTS只为了判断集合中是否存在该语句。
解读2:之所以,TBL_CODECOUNTRM 没有再提取别名,是因为字句中除了A表外只有一个表,不存在异议,无需提取别名。