<!-- 一址多证纳税人分析表 -->
<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. ACM-ICPC 2018 焦作赛区网络预赛 I Save the Room

    Bob is a sorcerer. He lives in a cuboid room which has a length of AAA, a width of BBB and a height ...

  2. easyui生成合并行,合计计算价格

    easyui生成合并行,合计计算价格 注:本文来源: 原创 一:图样你效果图 二:代码实现 1:datagrid 列展示: window.dataGrid = $("#dataGrid&qu ...

  3. Confluence 6 数据库整合的方法 2:针对有大量附件的运行实例

    设置准备 这个方法仅仅针对附件存储在文件系统中.如果你存储附件在数据库中,请参考 Attachment Storage Configuration 文档中的内容来找到如何在 2 种不同的文件存储方式之 ...

  4. Python1 简介及安装、基础

    Python介绍 Python是面向对象,高级语言,解释,动态和多用途编程语言.Python易于学习,而且功能强大,功能多样的脚本语言使其对应用程序开发具有吸引力. Python的语法和动态类型具有其 ...

  5. extra过滤

    extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些 ...

  6. bzoj 2190

    题意:求 题解:这题...数据范围是真小... 研究一下这一表达式,发现gcd(i,j)=1表示i,j互质,那么互质肯定能想到欧拉函数,可是欧拉函数要求j<i,那么我们变化一下:显然原矩阵是对称 ...

  7. 纯CSS3超酷3D旋转立方体动画特效

    简要教程 这是一款神奇的纯 CSS3 立方体动画特效插件.使用CSS3来制作动画效果已经成为WEB前端开发的一种时尚,从简单的颜色和尺寸动画,到复杂的旋转.翻转动画, CSS3 展现了它无穷的魅力.使 ...

  8. add web server(nginx)

    #!/bin/bash # # Web Server Install Script # Last Updated 2012.09.24 # ##### modify by WanJie 2012.09 ...

  9. 论文阅读笔记三十四:DSSD: Deconvolutiona lSingle Shot Detector(CVPR2017)

    论文源址:https://arxiv.org/abs/1701.06659 开源代码:https://github.com/MTCloudVision/mxnet-dssd 摘要 DSSD主要是向目标 ...

  10. R2CNN项目部分代码学习

    首先放出大佬的项目地址:https://github.com/yangxue0827/R2CNN_FPN_Tensorflow 那么从输入的数据开始吧,输入的数据要求为tfrecord格式的数据集,好 ...