mybatis中union可以用if判断连接,但是<select>中第一个select语句不能被if判断,因此可以从dual表中查询null来凑齐。union如果使用order by排序,那么只能放在最后一个查询语句的位置,并且不能带表名。
<!-- 一址多证纳税人分析表 -->
<select id="yzdznsrlistPage" parameterType="page" resultType="pd">
select * from (
select null NSRSBH,null NSRMC,null ZGSWJ_DM,null ZGSWSKFJ_DM,null SSGLY_DM,null FDDBRXM,null SCJYDZ,null ZCDZ
from dual
<if test="pd.flag==1 or pd.flag==2 or pd.flag==3">
union all <!-- 此处应该使用union all 而不是union,使用union的话会导致查出的数据量不对 -->
</if>
<if test="pd.flag==1 or pd.flag==3">
select NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ
from hx_dj.dj_nsrxx nsr
where nsr.zcdz in (select n.zcdz from (select ns.zcdz,count(1) cnt from hx_dj.dj_nsrxx ns group by ns.zcdz
having count(1) > 1) n)
<if test="pd.swjg != null and pd.swjg != ''">
AND
<foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")">
nsr.ZGSWSKFJ_DM LIKE '${item}%'
</foreach>
</if>
</if>
<if test="pd.flag==3">
union
</if>
<if test="pd.flag==2 or pd.flag==3">
select NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ
from hx_dj.dj_nsrxx nsrscjy
where nsrscjy.scjydz in (select nscjy.scjydz from (select nsscjy.scjydz,count(1) cnt from hx_dj.dj_nsrxx nsscjy group by nsscjy.scjydz
having count(1) > 1) nscjy)
<if test="pd.swjg != null and pd.swjg != ''">
AND
<foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")">
nsrscjy.ZGSWSKFJ_DM LIKE '${item}%'
</foreach>
</if>
</if>
) where NSRSBH is not null
</select>
针对本问题有了新的解决方式,上面的解决方法太过复杂。
其实要判断两个select查询语句是否合并,没必要判断union是否需要存在。让union一直保持存在就好,比如传1进来,可以让上面的select查出值,下面的select查出的是null;传2进来,可以让下面的select查出值,上面的select查出的是null。这样就没必要传
3进来了。多增加一列z,字段的值就是1、2,这样来决定两个查询语句是否查出来的值是null。
上面的语句可以改为
select NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ,1 z
from hx_dj.dj_nsrxx nsr
where nsr.zcdz in (select n.zcdz from (select ns.zcdz,count(1) cnt from hx_dj.dj_nsrxx ns group by ns.zcdz
having count(1) > 1) n)
<if test="pd.swjg != null and pd.swjg != ''">
AND
<foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")">
nsr.ZGSWSKFJ_DM LIKE '${item}%'
</foreach>
</if> and z = '1'
union
select NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ,2 z
from hx_dj.dj_nsrxx nsrscjy
where nsrscjy.scjydz in (select nscjy.scjydz from (select nsscjy.scjydz,count(1) cnt from hx_dj.dj_nsrxx nsscjy group by nsscjy.scjydz
having count(1) > 1) nscjy)
<if test="pd.swjg != null and pd.swjg != ''">
AND
<foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")">
nsrscjy.ZGSWSKFJ_DM LIKE '${item}%'
</foreach>
</if> and z = '2'
mybatis中union可以用if判断连接,但是<select>中第一个select语句不能被if判断,因此可以从dual表中查询null来凑齐。union如果使用order by排序,那么只能放在最后一个查询语句的位置,并且不能带表名。的更多相关文章
- iphone下元素放在了一个position: fixed的div中无法点击
网上的说法是这样的: iphone的浏览器有这么一个bug, 当你使用锚定或滚动页面后, 你会发现某些东西不能点击了! 如果你的这个“东西”放在了一个position: fixed的div中, 那么你 ...
- 第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数
第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; ...
- 关于实现mybatis order by 排序传递参数实现 问题记录
一 问题场景:本人项目纯纯的后端系统 并且项目前端采用纯纯的原生js 实现 1)表格 通过查询列表数据放入到域中 前段采用 for循环的方式实现遍历生成列表 2)分页实现本人是公司内部自定 ...
- union 时只能查出一个表中的信息,另一个表只能查出字段
原因:news表中title字段的编码,与brand表中的编码不一致导致 y
- SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。
top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 orde ...
- 玩得一手好注入之order by排序篇
看了之前Gr36_前辈在先知上的议题,其中有提到排序注入,这个在最近经常遇到这样的问题,所以先总结下order by 排序注入的知识. 0×00 背景 看了之前Gr36_前辈在先知上的议题,其中有提到 ...
- 详解MySQL中concat函数的用法(连接字符串)
MySQL中concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制 ...
- oracle order by 排序
Syntax ORDER BY { column-Name | ColumnPosition | Expression } [ ASC | DESC ] [ NULLS FIRST | NULLS L ...
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
随机推荐
- python-异常处理、元类
一.异常处理 1.异常处理介绍: 异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常没有被应用程序处理,那么该异常就会被抛出来,程序执行随之停止 2.异常通常包含三个部分 1.traceb ...
- 深入Golang调度器之GMP模型
前言 随着服务器硬件迭代升级,配置也越来越高.为充分利用服务器资源,并发编程也变的越来越重要.在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别. 并发: 逻 ...
- ssh 登录报错 packet_write_wait: Connection to x.x.x.x port 22: Broken pipe
问题 更新个人博客文章时遇到:Error: packet_write_wait: Connection to 192.30.253.113 port 22: Broken pipe packet_wr ...
- vuejs中使用echarts
<style scoped> .content { /*自行添加样式即可*/ } #main { /*需要制定具体高度,以px为单位*/ height: 400px; } </sty ...
- leetcode(js)算法之17电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母 示例: 输入:"23" 输出:[" ...
- axis 数据流
产生数据流的代码 模板 重新修改了下 :]axis_data_cnt='d0; :]axis_data_frame_cnt='d0; :]delay_cnt='d0; initial begin ...
- django之ORM数据库操作
一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录----------------->类实例 ...
- Linux基础实操二
实操一: 1) 新建用户natasha uid为1000,gid为555,备注信息为“master” 2) 修改natasha用户的家目录为/Natasha 3) 查看用户信息配置文件的最后一行 ca ...
- Synchronized和java.util.concurrent.locks.Lockde区别联系
1.Lock能够完成几乎所有synchronize的功能,并且具有锁投票,定时锁,可中断等候锁,synchronize是java语言层面的,是内置的关键字,Lock是一个包,synchronize使用 ...
- light1341 唯一分解定理
一定要先打表素数,然后进行分解,直接分解是会t的 #include <cstdio> #include <cstring> #include <algorithm> ...