SQL优化

SELECT t.DEVEUI AS deveui, 
		t.DEVTYPE AS devType, 
		d.ORDNO AS ordNo, 
		t.CLAANO AS claaNo, 
		t.DEVSTATUS AS devStatus, 
		t.OPTIME AS opTime, 
		t.REMARK AS remark,
		t.PROJECTID AS projectid,
		t.ADDRESS AS address,
		t.GPSLAT AS gpslat,
		t.GPSLNG AS gpslng,
		t.GPSALT AS gpsalt,
		<!-- t.BOXNO AS boxno, -->
		d.BOXNO AS boxno,
		p.title,
		o.SALECONTRACTNO AS saleContractNo
   FROM osmdb.t_osm_dev t LEFT JOIN t_osm_project_base p ON t.PROJECTID = p.projectid
   LEFT JOIN t_osm_order_dev d ON d.DEVEUI = t.DEVEUI LEFT JOIN t_osm_order_base o ON o.ORDNO = d.ORDNO
  WHERE 1 = 1 
  <if test='p.projectid != null and p.projectid != "" '>
	 AND t.PROJECTID = #{p.projectid, jdbcType=VARCHAR} 
  </if>
  <if test='p.claaNo != 0'>  
	 AND t.CLAANO = #{p.claaNo, jdbcType=INTEGER} 
  </if>
  <if test='p.devType != null and p.devType != "" '>
	 AND t.DEVTYPE = #{p.devType, jdbcType=VARCHAR} 
  </if>
  <if test='p.deveui != null and p.deveui != "" '>
	 AND t.DEVEUI = #{p.deveui, jdbcType=VARCHAR} 
  </if>
  <if test='p.ordNo != null and p.ordNo != "" '> 
	 AND t.DEVEUI IN (SELECT DISTINCT DEVEUI 
						FROM osmdb.t_osm_order_dev 
					   WHERE ORDNO = #{p.ordNo, jdbcType=VARCHAR}) 
  </if>
  <if test='p.devStatus != -1 and p.devStatus != 99 and p.devStatus != -99 '>
	 AND t.DEVSTATUS = #{p.devStatus, jdbcType=INTEGER} 
  </if>
  <if test='p.devStatus == 99'>
	 AND t.DEVSTATUS NOT IN (20,21) 
  </if>
  <!--  -99代表后台重新创建发货清单   -->
  <if test='p.devStatus == -99'>
	 AND t.DEVSTATUS IN (11,13) 
  </if>
  <if test='p.beginDate != null'>
	 AND t.OPTIME &gt;= #{p.beginDate, jdbcType=DATE} 
  </if>
  <if test='p.endDate != null'>
	 AND t.OPTIME &lt;= #{p.endDate, jdbcType=DATE} 
  </if>
  <if test='p.boxnoList != null and p.boxnoList.size()>0'>
	 AND d.BOXNO in  
  <foreach collection="p.boxnoList"  open="("  close=")" separator="," item="boxno">  
		 #{boxno, jdbcType=VARCHAR} 
  </foreach>
  </if>
  <if test='p.projectId != null and p.projectId != "" '>
	 AND t.PROJECTID in (SELECT PROJECTID FROM t_osm_user_project WHERE PROJECTID = #{p.projectId, jdbcType=VARCHAR})
  </if>
  ORDER BY t.OPTIME DESC 
  LIMIT #{p.batch, jdbcType=INTEGER} OFFSET #{p.offset, jdbcType=INTEGER} 		
SELECT t.DEVEUI AS deveui, 
t.DEVTYPE AS devType, 
d.ORDNO AS ordNo, 
t.CLAANO AS claaNo, 
t.DEVSTATUS AS devStatus, 
t.OPTIME AS opTime, 
t.REMARK AS remark,
t.PROJECTID AS projectid,
t.ADDRESS AS address,
t.GPSLAT AS gpslat,
t.GPSLNG AS gpslng,
t.GPSALT AS gpsalt,
d.BOXNO AS boxno,
p.title,
o.SALECONTRACTNO AS saleContractNo 
FROM (
SELECT * FROM osmdb.t_osm_dev tt 
 WHERE 1 = 1 
  <if test='p.projectid != null and p.projectid != "" '>
	 AND tt.PROJECTID = #{p.projectid, jdbcType=VARCHAR} 
  </if>
  <if test='p.claaNo != 0'>  
	 AND tt.CLAANO = #{p.claaNo, jdbcType=INTEGER} 
  </if>
  <if test='p.devType != null and p.devType != "" '>
	 AND tt.DEVTYPE = #{p.devType, jdbcType=VARCHAR} 
  </if>
  <if test='p.deveui != null and p.deveui != "" '>
	 AND tt.DEVEUI = #{p.deveui, jdbcType=VARCHAR} 
  </if>
  <if test='p.ordNo != null and p.ordNo != "" '> 
	 AND tt.DEVEUI IN (SELECT DISTINCT DEVEUI 
						FROM osmdb.t_osm_order_dev 
					   WHERE ORDNO = #{p.ordNo, jdbcType=VARCHAR}) 
  </if>
  <if test='p.devStatus != -1 and p.devStatus != 99 and p.devStatus != -99 '>
	 AND tt.DEVSTATUS = #{p.devStatus, jdbcType=INTEGER} 
  </if>
  <if test='p.devStatus == 99'>
	 AND tt.DEVSTATUS NOT IN (20,21) 
  </if>
  <!--  -99代表后台重新创建发货清单   -->
  <if test='p.devStatus == -99'>
	 AND tt.DEVSTATUS IN (11,13) 
  </if>
  <if test='p.beginDate != null'>
	 AND tt.OPTIME &gt;= #{p.beginDate, jdbcType=DATE} 
  </if>
  <if test='p.endDate != null'>
	 AND tt.OPTIME &lt;= #{p.endDate, jdbcType=DATE} 
  </if>
  <if test='p.projectId != null and p.projectId != "" '>
	 AND tt.PROJECTID = #{p.projectId, jdbcType=VARCHAR}
  </if>
ORDER BY tt.DEVEUI ASC 
LIMIT #{p.batch, jdbcType=INTEGER} OFFSET #{p.offset, jdbcType=INTEGER}
) AS t 
LEFT JOIN t_osm_project_base p ON t.PROJECTID = p.projectid
LEFT JOIN t_osm_order_base o ON o.ORDNO = t.ORDNO 
LEFT JOIN 
(SELECT a.ORDNO, a.BOXNO, a.DEVEUI FROM t_osm_order_dev a,osmdb.t_osm_dev b 
 WHERE a.DEVEUI = b.DEVEUI 	
  <if test='p.projectid != null and p.projectid != "" '>
	 AND b.PROJECTID = #{p.projectid, jdbcType=VARCHAR} 
  </if>
  <if test='p.claaNo != 0'>  
	 AND b.CLAANO = #{p.claaNo, jdbcType=INTEGER} 
  </if>
  <if test='p.devType != null and p.devType != "" '>
	 AND b.DEVTYPE = #{p.devType, jdbcType=VARCHAR} 
  </if>
  <if test='p.deveui != null and p.deveui != "" '>
	 AND b.DEVEUI = #{p.deveui, jdbcType=VARCHAR} 
  </if>
  <if test='p.ordNo != null and p.ordNo != "" '> 
	 AND b.DEVEUI IN (SELECT DISTINCT DEVEUI 
						FROM osmdb.t_osm_order_dev 
					   WHERE ORDNO = #{p.ordNo, jdbcType=VARCHAR}) 
  </if>
  <if test='p.devStatus != -1 and p.devStatus != 99 and p.devStatus != -99 '>
	 AND b.DEVSTATUS = #{p.devStatus, jdbcType=INTEGER} 
  </if>
  <if test='p.devStatus == 99'>
	 AND b.DEVSTATUS NOT IN (20,21) 
  </if>
  <!--  -99代表后台重新创建发货清单   -->
  <if test='p.devStatus == -99'>
	 AND b.DEVSTATUS IN (11,13) 
  </if>
  <if test='p.beginDate != null'>
	 AND b.OPTIME &gt;= #{p.beginDate, jdbcType=DATE} 
  </if>
  <if test='p.endDate != null'>
	 AND b.OPTIME &lt;= #{p.endDate, jdbcType=DATE} 
  </if>
  <if test='p.projectId != null and p.projectId != "" '>
	 AND b.PROJECTID = #{p.projectId, jdbcType=VARCHAR}
  </if>
  ORDER BY b.DEVEUI ASC 
  LIMIT #{p.batch, jdbcType=INTEGER} OFFSET #{p.offset, jdbcType=INTEGER} 

) AS d ON d.DEVEUI = t.DEVEUI 

去掉繁杂的条件看的清楚一点:

 SELECT         t.DEVEUI AS deveui, 
		t.DEVTYPE AS devType, 
		d.ORDNO AS ordNo, 
		t.CLAANO AS claaNo, 
		t.DEVSTATUS AS devStatus, 
		t.OPTIME AS opTime, 
		t.REMARK AS remark,
		t.PROJECTID AS projectid,
		t.ADDRESS AS address,
		t.GPSLAT AS gpslat,
		t.GPSLNG AS gpslng,
		t.GPSALT AS gpsalt,
		d.BOXNO AS boxno,
		p.title,
		o.SALECONTRACTNO AS saleContractNo 
  FROM (SELECT * FROM osmdb.t_osm_dev tt 
	 WHERE 1 = 1 
		  
		ORDER BY tt.DEVEUI ASC 
		LIMIT #{p.batch, jdbcType=INTEGER} OFFSET #{p.offset, jdbcType=INTEGER}
	  ) AS t 
      LEFT JOIN t_osm_project_base p ON t.PROJECTID = p.projectid
      LEFT JOIN t_osm_order_base o ON o.ORDNO = t.ORDNO 
      LEFT JOIN 
	   (SELECT a.ORDNO, a.BOXNO, a.DEVEUI FROM t_osm_order_dev a,osmdb.t_osm_dev b 
	     WHERE a.DEVEUI = b.DEVEUI 	
	     
		  ORDER BY b.DEVEUI ASC 
		  LIMIT #{p.batch, jdbcType=INTEGER} OFFSET #{p.offset, jdbcType=INTEGER} 
		) AS d ON d.DEVEUI = t.DEVEUI 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值