在多表的条件搜索中,一般将所有需要的表全部关联在一起,然后再构造搜索条件。但这往往会把暂不需要的表也关联在一起。
例如:在搜索学生时,可以选择搜索某部门的学生,需要关联部门表:
select s.name,s.age,d.name
from stu s
left join dept d
on s.stuId = d.stuId
where s.del_flag = '0'
但是如果查询所有学生,那么就不需要关联部门了:
select s.name,s.age,d.name
from stu s
<if test="dept.name !=null and dept.name != ''">
left join dept d
on s.stuId = d.stuId
</if>
where s.del_flag = '0'
或者可以进一步优化sql,需要什么字段,关联时就查询什么字段:
select s.name,s.age,d.name
from stu s
<if test="dept.name !=null and dept.name != ''">
left join (select name,num from dept) d
on s.stuId = d.stuId
</if>
where s.del_flag = '0'
仅作学习记录。