两个表联合时,hql动态拼接,需要后置查询条件的解决办法

两表联合后,需要添加多个查询条件的解决方案

一、 这是我第一次在项目组做融资租赁时遇到的问题,代码如下:

public ComposedBean OverdueReminder(Map param) throws CommonException{
ComposedBean composedBean = new ComposedBean();
StringBuffer sql = new StringBuffer();
sql.append(" select * from (")
//0申请编号, 1 申请人类型
.append(" select m.asqbh,m.asqlx, ")
//通过对申请人类型的判断设置客户姓名
.append(" case m.asqlx when ‘1‘ then i.akhxm when ‘2‘ then i.aQymc2 else ‘‘ end as akhxm, ")
//4操作人员, 5客户电话, 6车辆类型, 7产品方案, 8提交日期
.append(" m.aczry,i.asjhm,n.acllx,m.acpfamc,m.dsctjrq ")
.append(" from lb_apply_car n ")
.append(" left join lb_apply_lessee_info i on i.asqbh = n.asqbh ")
.append(" left join lb_apply_main m on m.asqbh = n.asqbh ")
.append(" where n.acllx = ‘1‘ and m.dfkrq is not null ")
.append(" and not exists (select 1 from tinfo_insurance_policy p where n.asqbh = p.asqbh) ")
.append(" union ")//联合下表
.append(" select m.asqbh,m.asqlx, ")
.append(" case m.asqlx when ‘1‘ then i.akhxm when ‘2‘ then i.aQymc2 else ‘‘ end as akhxm, ")
.append(" m.aczry,i.asjhm,n.acllx,m.acpfamc,m.dsctjrq from lb_apply_car_invoice t ")
.append(" left join lb_apply_main m on m.asqbh = t.asqbh ")
.append(" left join lb_apply_car n on n.asqbh = t.asqbh ")
.append(" left join lb_apply_lessee_info i on m.asqbh =i.asqbh ")
.append(" where t.aclfph is null and m.dfkrq is not null and n.acllx = ‘1‘ ) where 1=1");
//申请编号
if(StringUtils.isNotBlank((String)param.get("asqbh"))){
sql.append(" and asqbh =‘"+param.get("asqbh")+"‘");
}
//客户姓名
if(StringUtils.isNotBlank((String)param.get("akhxm"))){
sql.append(" and akhxm like ‘%"+param.get("akhxm")+"%‘");
}

composedBean.setSql(sql.toString());
return composedBean;
}

sql 代码如下:

SELECT
*
FROM
(
SELECT
m.asqbh,
m.asqlx,
CASE m.asqlx
WHEN ‘1‘
THEN i.akhxm
WHEN ‘2‘
THEN i.aQymc2
ELSE ‘‘
END AS akhxm,
m.aczry,
i.asjhm,
n.acllx,
m.acpfamc,
m.dsctjrq
FROM
lb_apply_car n
LEFT JOIN
lb_apply_lessee_info i
ON
i.asqbh = n.asqbh
LEFT JOIN
lb_apply_main m
ON
m.asqbh = n.asqbh
WHERE
n.acllx = ‘1‘
AND m.dfkrq IS NOT NULL
AND NOT EXISTS
(
SELECT
1
FROM
tinfo_insurance_policy p
WHERE
n.asqbh = p.asqbh)
UNION
SELECT
m.asqbh,
m.asqlx,
CASE m.asqlx
WHEN ‘1‘
THEN i.akhxm
WHEN ‘2‘
THEN i.aQymc2
ELSE ‘‘
END AS akhxm,
m.aczry,
i.asjhm,
n.acllx,
m.acpfamc,
m.dsctjrq
FROM
lb_apply_car_invoice t
LEFT JOIN
lb_apply_main m
ON
m.asqbh = t.asqbh
LEFT JOIN
lb_apply_car n
ON
n.asqbh = t.asqbh
LEFT JOIN
lb_apply_lessee_info i
ON
m.asqbh =i.asqbh
WHERE
t.aclfph IS NULL
AND m.dfkrq IS NOT NULL
AND n.acllx = ‘1‘ )
WHERE
1=1
AND asqbh =‘0007576‘
AND akhxm LIKE ‘%钱林泉%‘

添加查询条件就是添加where,我们可以在主体sql中通过写代码 where 1=1,来为后面的sql 拼接提供where ,后面的代码就可以直接书写and。。。。 了

时间: 2024-10-30 03:21:20

两个表联合时,hql动态拼接,需要后置查询条件的解决办法的相关文章

两个表联合查询获取聊天表中用户最新的一条聊天数据

一个用户表,一个聊天记录表,两个表联合查询获取聊天表中用户最新的一条聊天数据 select c.contentfrom sixin as c where c.tid = a.user_idorder by ctime desc limit 0,1) as content,(select c.statusfrom sixin as c where c.tid = a.user_idorder by ctime desc limit 0,1) as status from users as a, s

Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法

原文:Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法 今天同事在做安装包的时候,有一个读取注册表路径的需求,需要根据读取的值来写配置文件,按照常规的做法,写好了注册表搜索方法,但是在测试的时候,发现总是会将系统盘下的Program Files\xxx路径读取为Program Files (x86)\xxx,如下图所示: 之后测试了如果读取非系统盘下的此路径,不会出现这个问题. 但是这个路径一般情况下都是默认安装在

Windows Server+AMD GPU+HDMI时_黑边_不铺满问题的解决办法

HDMI接显示器或电视,有黑边或者被放大了是个很常见的问题,显卡设置界面里改下Scale或者Overscan/Underscan就行,可问题是WindowsServer版的CCC没有控制颜色对比度和缩放的那个界面. 不怕,直接改注册表就好. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{Your Card GUID}\0000]"TVEnableOverscan"=dword:00000000"Digi

《BI项目笔记》SSAS部署时发生的问题——元数据管理器中存在错误 解决办法

原文:<BI项目笔记>SSAS部署时发生的问题--元数据管理器中存在错误 解决办法 在生成和部署期间出错.是否继续?解决办法: 用Microsoft SQL Server Management Studio 连接Analysis Services 然后删除多维数据库,重新布署.这样就OK的.

jquery中动态新增的元素节点无法触发事件解决办法

在使用jquery中动态新增的元素节点时会发现添加的事件是无法触发的,我们下面就为各位来详细的介绍此问题的解决办法. 比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为“reply”,如果你用的是$(".reply").click(function(){ //do something... }),想必后面通过ajax加载进来的列表中的回复按钮,点击事件会失效. 其实最简单的方法就是直接在标签中写onclick="",但是这样写其实是有点lo

安装office2016时弹出microsoft setup bootstrapper已停止工作的解决办法

安装office2016时安装进度条走到最后又回滚,弹出microsoft setup bootstrapper已停止工作,最后"安装出错" 经过了1天的试尽了各种控制面板卸载.文件夹删除.office注册表删除等方法,最后用了以下方法才终于解决.希望没试过我这个方法的朋友们先试下这个方法.(⊙o⊙)- 确认启动Windows Event Log这个服务项.Windows系统的服务打开方式如下:在"运行"里输入services.msc,就可以打开了,或者通过计算机管

调用微信退款接口或发红包接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法

我总结了一下出现证书无法加载的原因有以下三个 1.证书密码不正确,微信证书密码就是商户号 解决办法:请检查证书密码是不是和商户号一致 2.IIS设置错误,未加载用户配置文件 解决办法:找到网站使用的应用程序池-->右击-->高级设置-->打开如下图-->在加载用户配置文件选择true 3.如果以上两个方案都不能解决问题,就有可能是加载证书时没有给定证书存储标识 解决方法:在加载证书方法时使用以下方法,请注意第三个参数 X509Certificate2 cer = new X509C

调用微信退款接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法

我总结了一下出现证书无法加载的原因有以下三个 1.证书密码不正确,微信证书密码就是商户号 解决办法:请检查证书密码是不是和商户号一致 2.IIS设置错误,未加载用户配置文件 解决办法:找到网站使用的应用程序池-->右击-->高级设置-->打开如下图-->在加载用户配置文件选择true 3.如果以上两个方案都不能解决问题,就有可能是加载证书时没有给定证书存储标识 解决方法:在加载证书方法时使用以下方法,请注意第三个参数 X509Certificate2 cer = new X509C

android 当ListView滚动时自动调用 onCheckedChanged 导致CheckBox 状态不停变化 的解决办法

今天在做一个含有CheckBox 的ListView时,发现当初始化CheckBox的状态后, 滚动ListView,其中CheckBox 的选中状态不停的发生变化.最后发现原因是 ListView滚动时自动调用 onCheckedChanged 导致的.在查看了各种博客的解决办法后,国外的网站上有一个办法解决了我的问题.写下来分享一下. 在自定义Adapter的getView方法中这样写就行了. Java代码   //在初始化CheckBox状态和设置状态变化监听事件之前,先把状态变化监听事件