SQL性能之EXIST,取日期字段月份
2011-11-15 10:54 三皮开发时 阅读(402) 评论(1) 编辑 收藏 举报--查询变电巡视路线本月是否被其他路线给引用
SELECT *
FROM PROD_GZN_SHEET_PATROL_LINE PL
WHERE EXISTS
(SELECT PS.WORK_SHEET_ID
FROM PROD_TASK_WORK_SHEET PS
WHERE PS.WORK_SHEET_ID = PL.WORK_SHEET_ID
AND TO_CHAR(PS.TASK_BEGIN_DATE, 'MM') = 5)
AND PL.WORK_SHEET_ID != 1000961
SELECT *
FROM PROD_GZN_SHEET_PATROL_LINE PL
WHERE EXISTS
(SELECT PS.WORK_SHEET_ID
FROM PROD_TASK_WORK_SHEET PS
WHERE PS.WORK_SHEET_ID = PL.WORK_SHEET_ID
AND TO_CHAR(PS.TASK_BEGIN_DATE, 'MM') = 5)
AND PL.WORK_SHEET_ID != 1000961
1.这里用到了EXISTS,而非IN,IN的算法是采用笛卡儿积形式,效率远远慢于EXISTS,写法是在子查询中将两表的字段关联上
WHERE PS.WORK_SHEET_ID = PL.WORK_SHEET_ID
2. 取日期字段的月份方法