1.多表联表查询
select a.device_code,a.device_name,a.done_person,a.task_code,a.child_code,b.compoInvCode from
(SELECT
a.device_code,a.device_name,a.done_person,a.task_code,b.child_code
FROM
gx_device a
JOIN gx_device_detail b ON a.device_code =
b.device_code) a
join xf_component_invcode b on a.child_code = b.compoNumber
核心思想:两个表的联立,用join加上连接条件就行。如果三个表连接,就先把两个表连接起来,把连接起来的结果用括号括起来当一个整体,再连接第三个表,就回到了两个表连接的情况,这种把结果当一个整体的表的方法可以解决任意多个表的连接问题。
2.distinct 加在select之后,可去重复
3.limit + 数字 放在最后,可只读取数字相应的行 比如 limit 10 读取前10行
4.and 的优先级比or的优先级高,在给条件时要注意
5.left join 取到等值条件后会加入左边表的不满足等值条件的部分,right join 取到等值条件后会加入右边表的不满足等值条件的部分,inner join 只取到满足等值条件的部分。
6.动态sql语句,常见情况:多条件查询,给定越多的条件,查询越精确。
如:
<select id="passDeviceInfoToQuery" parameterType="java.lang.String" resultType="org.jeecg.modules.stasticsandquery.entity.DeviceInfo" SELECT distinct a.device_code,b.material_code,b.material_name,a.own_order,b.order_status as 'taskStatus' FROM gx_device_main a JOIN xf_task_order b ON a.material_code = b.material_code <where> <if test="deviceCode != null and deviceCode != ''"> a.device_code = #{deviceCode} </if> <if test="material != null and material != ''"> AND (b.material_code = #{material} or b.material_name = #{material}) </if> <if test="taskStatus != null and taskStatus != ''"> and b.order_status = #{taskStatus} </if> <if test="ownOrder != null and ownOrder != ''"> and a.own_order = #{ownOrder} </if> </where> </select>
<if test="deviceCode != null and deviceCode != ''">
a.device_code = #{deviceCode}
</if>
<if test=""> if标签做条件判断
<where> 标签可去掉多出来的and关键字
7.order by + 字段名 排序 默认按asc升序排序,指定desc时按降序排序。