<!-- 一址多证纳税人分析表 -->
<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排序,那么只能放在最后一个查询语句的位置,并且不能带表名。的更多相关文章

  1. iphone下元素放在了一个position: fixed的div中无法点击

    网上的说法是这样的: iphone的浏览器有这么一个bug, 当你使用锚定或滚动页面后, 你会发现某些东西不能点击了! 如果你的这个“东西”放在了一个position: fixed的div中, 那么你 ...

  2. 第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;  ...

  3. 关于实现mybatis order by 排序传递参数实现 问题记录

    一    问题场景:本人项目纯纯的后端系统  并且项目前端采用纯纯的原生js 实现 1)表格  通过查询列表数据放入到域中  前段采用 for循环的方式实现遍历生成列表 2)分页实现本人是公司内部自定 ...

  4. union 时只能查出一个表中的信息,另一个表只能查出字段

    原因:news表中title字段的编码,与brand表中的编码不一致导致 y

  5. SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。

    top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 orde ...

  6. 玩得一手好注入之order by排序篇

    看了之前Gr36_前辈在先知上的议题,其中有提到排序注入,这个在最近经常遇到这样的问题,所以先总结下order by 排序注入的知识. 0×00 背景 看了之前Gr36_前辈在先知上的议题,其中有提到 ...

  7. 详解MySQL中concat函数的用法(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制 ...

  8. oracle order by 排序

    Syntax ORDER BY { column-Name | ColumnPosition | Expression } [ ASC | DESC ] [ NULLS FIRST | NULLS L ...

  9. C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?

    C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...

随机推荐

  1. 打包APP

    记得之前网上也有app打包平台,但是都会有所限制,或者增加广告等等,这里呢,介绍一款工具,可以自己将网站打包成app. wex5 (WeX5开源免费跨端开发工具-html5 app开发就用WeX5)官 ...

  2. swift 学习- 13 -- 下标

    // 下标 可以定义在 类, 结构体, 和 枚举 中, 是访问集合, 列表或 序列中元素的快捷方式, 可以使用下标的索引, 设置 和 获取值, 而不需要再调用对应的存取方法, 举例来说, 用下标访问一 ...

  3. STM32应用实例十四:利用光敏二极管实现光度测量

    最近我们在开发臭氧发生器时,需要监测生成的臭氧的浓度,于是想到使用光度计来测量.因为不同浓度的臭氧对管的吸收作用是不相同的,于是检测光照强度的变化就可以得到相应的浓度数据. 1.硬件设计 此次光照度检 ...

  4. 《MySQL5.7从入门到精通(视频教学版)》

    · 一:书籍PDF获取途径 pdf 文档 在 此QQ群(668345923) 的群文件里面 学习视频资源 二:书籍介绍 本书主要包括MySQL的安装与配置.数据库的创建.数据表的创建.数据类型和运算符 ...

  5. 设置外部查找工具来索引 Confluence 6

    任何网页的 crawler  工具都可以被用来索引你的 Confluence 站点中的内容.如果你希望注册用户才能够查看的内容也被索引的话,你需要为你的 Confluence 创建一个只被 crawl ...

  6. DSB

    Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...

  7. Python基础之面向对象进阶二

    一.__getattribute__ 我们一看见getattribute,就想起来前面学的getattr,好了,我们先回顾一下getattr的用法吧! class foo: def __init__( ...

  8. bzoj 1495

    这是一道...卡了我一个月的树形dp... 我真是太弱了... 其实仔细想想,这题的核心思路并不是特别复杂,但是的确存在不小的难度 作为一个看过全网基本所有题解+标程才弄明白这题到底怎么回事的蒟蒻,我 ...

  9. Python继承、方法重写

    继承 在编写类时,并不是每次都要从空白开始.当要编写的类和另一个已经存在的类之间存在一定的继承关系时,就可以通过继承来达到代码重用的目的,提高开发效率. class one(): "&quo ...

  10. (转)webpack和webpack-simple区别(如何引入css文件)

    博主最近研究vue+webpack的时候想引入css文件死活引入不出来,在webpack-simple那里却能引得出来,十分的纳闷,然后细心的调试了一下,原来这webpack和webpack-simp ...