标签:
我写的SQL如下
SELECT tall.LOCATION_ID, tall.LOCATION_NAME, tall.JOB_ID, tall.JOB_NAME, tall.NEGOTIABLE_FLAG, tall.SALARY_MAX, tall.SALARY_MIN, tall.ADD_TIME, tall.ENTERPRISE_ID, tall.ENTERPRISE_NAME, tall.ENTERPRISE_LOGO, tall.WORK_YEARS_ID, tall.WORK_YEARS_INFO, IFNULL( tujf.FOCUS_FLAG,0) as flag FROM (SELECT tj.JOB_ID, tj.LOCATION_ID, tl.LOCATION_NAME, tj.JOB_NAME, tj.NEGOTIABLE_FLAG, tj.SALARY_MAX, tj.SALARY_MIN, tj.ADD_TIME, tj.ENTERPRISE_ID, te.ENTERPRISE_NAME, te.ENTERPRISE_LOGO, twy.WORK_YEARS_ID, twy.WORK_YEARS_INFO FROM t_job tj,t_location tl,t_enterprise te,t_hr th,t_work_years twy,t_job_category tjc,t_job_type tjt,t_salary ts WHERE tj.LOCATION_ID = tl.LOCATION_ID AND tl.LOCATION_LEVEL = 2 AND tl.USE_FLAG = 1 AND tj.ENTERPRISE_ID = te.ENTERPRISE_ID AND te.USE_FLAG = 1 AND tj.HR_ID = th.HR_ID AND th.USE_FLAG = 1 AND tj.WORK_YEARS_ID = twy.WORK_YEARS_ID AND tj.JOB_CATEGORY_ID = tjc.JOB_CATEGORY_ID AND tjc.USE_FLAG = 1 AND tj.JOB_TYPE_ID = tjt.JOB_TYPE_ID AND tjt.USE_FLAG = 1 AND ts.SALARY_ID = #{salaryId} AND ts.SALARY_MAX >=tj.SALARY_MAX AND ts.SALARY_MIN <= tj.SALARY_MIN <if test="jobCategoryId != null"> AND tjc.JOB_CATEGORY_ID = #{jobCategoryId} </if> <if test="locationId != null"> AND tl.LOCATION_ID = #{locationId} </if> <if test="workYearId != null"> AND twy.WORK_YEARS_ID = #{workYearId} </if> <if test="jobTypeId != null"> AND tjt.JOB_TYPE_ID = #{jobTypeId} </if> <if test="lastTime != null"> AND tj.ADD_TIME <= #{lastTime} </if> GROUP BY tj.JOB_ID ORDER BY tj.ADD_TIME DESC) tall left join (select JOB_ID as FOCUS_JOB_ID,‘1‘ as FOCUS_FLAG from t_user_job_focus where user_id = #{userId} and TYPE = ‘01‘) tujf on tall.JOB_ID = tujf.FOCUS_JOB_ID LIMIT #{pageIndex}
优化后的SQL如下
SELECT tallTwo.JOB_ID, tallTwo.LOCATION_ID, tallTwo.LOCATION_NAME, tallTwo.JOB_NAME, tallTwo.NEGOTIABLE_FLAG, tallTwo.SALARY_MAX, tallTwo.SALARY_MIN, tallTwo.ADD_TIME, tallTwo.ENTERPRISE_ID, tallTwo.ENTERPRISE_NAME, tallTwo.ENTERPRISE_LOGO, tallTwo.WORK_YEARS_ID, tallTwo.WORK_YEARS_INFO, tallTwo.HR_ID, tallTwo.JOB_CATEGORY_ID, IFNULL( tujf.FOCUS_FLAG,0) as flag FROM (SELECT tall.JOB_ID, tall.LOCATION_ID, tl.LOCATION_NAME, tall.JOB_NAME, tall.NEGOTIABLE_FLAG, tall.SALARY_MAX, tall.SALARY_MIN, tall.ADD_TIME, tall.ENTERPRISE_ID, te.ENTERPRISE_NAME, te.ENTERPRISE_LOGO, tall.WORK_YEARS_ID, twy.WORK_YEARS_INFO, tall.HR_ID, tall.JOB_CATEGORY_ID, tall.JOB_TYPE_ID FROM ( SELECT tj.JOB_ID, tj.LOCATION_ID, tj.JOB_NAME, tj.NEGOTIABLE_FLAG, tj.SALARY_MAX, tj.SALARY_MIN, tj.ADD_TIME, tj.ENTERPRISE_ID, tj.WORK_YEARS_ID, tj.HR_ID, tj.JOB_CATEGORY_ID, tj.JOB_TYPE_ID FROM t_job tj <if test="salaryId != null"> ,t_salary ts </if> WHERE 1 = 1 <if test="salaryId != null"> AND ts.SALARY_ID = #{salaryId} AND ts.SALARY_MAX >=tj.SALARY_MAX AND ts.SALARY_MIN <= tj.SALARY_MIN </if> <if test="locationId != null"> AND tj.LOCATION_ID = #{locationId} </if> <if test="workYearId != null"> AND tj.WORK_YEARS_ID = #{workYearId} </if> <if test="jobCategoryId != null"> AND tj.JOB_CATEGORY_ID = #{jobCategoryId} </if> <if test="jobTypeId != null"> AND tj.JOB_TYPE_ID = #{jobTypeId} </if> <if test="lastTime != null"> AND tj.ADD_TIME <= #{lastTime} </if> GROUP BY tj.JOB_ID ORDER BY tj.ADD_TIME DESC ) tall LEFT JOIN t_location tl ON tall.LOCATION_ID = tl.LOCATION_ID AND tl.LOCATION_LEVEL = 2 AND tl.USE_FLAG = 1 LEFT JOIN t_enterprise te ON tall.ENTERPRISE_ID = te.ENTERPRISE_ID AND te.USE_FLAG = 1 LEFT JOIN t_hr th ON tall.HR_ID = th.HR_ID AND th.USE_FLAG = 1 LEFT JOIN t_work_years twy ON tall.WORK_YEARS_ID = twy.WORK_YEARS_ID LEFT JOIN t_job_category tjc ON tall.JOB_CATEGORY_ID = tjc.JOB_CATEGORY_ID AND tjc.USE_FLAG = 1 LEFT JOIN t_job_type tjt ON tall.JOB_TYPE_ID = tjt.JOB_TYPE_ID AND tjt.USE_FLAG = 1) tallTwo LEFT JOIN (select JOB_ID as FOCUS_JOB_ID,‘1‘ as FOCUS_FLAG from t_user_job_focus where user_id = #{userId} and TYPE = ‘01‘) tujf ON tallTwo.JOB_ID = tujf.FOCUS_JOB_ID LIMIT #{pageIndex}
思路对比
我的思路:先关联所有需要的表查出所有的数据,再根据条件过滤。
项目经理思路:先查出基本数据,根据条件过滤,再关联需要的表。
标签:
原文地址:http://my.oschina.net/u/2312022/blog/519000