写了一个select的检索,但是一直提示报错:错误主要是多了一个where
报错信息
ERROR c.a.d.f.s.StatFilter - [mergeSql,150] - merge sql error, dbType mysql, druid-1.2.16, sql : select count(0) from (
select ps.unit,ps.serialNumber,ps.batchCode,ps.pnCode,ps.materialCode,ps.pn_information,ps.specificationType,ps.assetClass,
pu.storageType ,pu.name ,pu.department ,pu.create_time, pu.storageRoom ,pu.remark,sum(numbersRuKu) as numbersRuKu
from pnassertrukudetails ps left join pnassertruku pu on ps.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id
**where** group by materialCode
) tmp_count
但是我用了trim,还是报同样的错误:
写的sql
<select id="getKuCunInformation" parameterType="com.ruoyi.system.domain.PnModelInOutInventory" resultMap="result">
select ps.unit,ps.serialNumber,ps.batchCode,ps.pnCode,ps.materialCode,ps.pn_information,ps.specificationType,ps.assetClass,
pu.storageType ,pu.name ,pu.department ,pu.create_time, pu.storageRoom ,pu.remark,sum(numbersRuKu) as numbersRuKu
from pnassertrukudetails ps left join pnassertruku pu on ps.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id
<trim prefix="where" suffixOverrides="AND |OR">
<if test="materialCode == null or materialCode == '' ">
<if test="pnCode == null or pnCode == '' ">
<if test="storageType == null or storageType == '' ">
<if test="storageRoom == null or storageRoom == '' ">
<if test="createTime == null or createTime == '' ">
group by materialCode and
</if>
</if>
</if>
</if>
</if>
<if test="materialCode != null and materialCode != '' ">
materialCode = #{materialCode} and
</if>
<if test="pnCode != null and pnCode != '' ">
pnCode = #{pnCode} and
</if>
<if test="storageType != null and storageType != '' ">
storageType = #{storageType} and
</if>
<if test="storageRoom != null and storageRoom != '' ">
storageRoom = #{storageRoom} and
</if>
<if test="assetClass != null and assetClass != '' ">
assetClass = #{assetClass} and
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') and
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') and
</if>
</trim>
</select>
有没有可能是你的逻辑错误,<trim></trim>
的作用是,如果标签内有任意一个条件命中,则添加prefix
,你的是where
,另外去除多余的suffixOverrides
,你是AND
或者OR
,现在是其它<if>
没有命中,但是group by materialCode and
命中了,命中后去除最后的and
,在最前面加where
我没有看懂你要拼接什么样的SQL,你的if
到底是where
条件,还是追加到group by
之后
猜测你的意图如下:
<select id="getKuCunInformation" parameterType="com.ruoyi.system.domain.PnModelInOutInventory" resultMap="result">
select ps.unit, ps.serialNumber, ps.batchCode, ps.pnCode, ps.materialCode, ps.pn_information,
ps.specificationType, ps.assetClass, pu.storageType ,pu.name ,pu.department ,
pu.create_time, pu.storageRoom ,pu.remark,sum(numbersRuKu) as numbersRuKu
from pnassertrukudetails ps
left join pnassertruku pu on ps.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id
<where>
</if test="materialCode != null and materialCode != '' ">
materialCode = #{materialCode}
</if>
<if test="pnCode != null and pnCode != '' ">
and pnCode = #{pnCode}
</if>
<if test="storageType != null and storageType != '' ">
and storageType = #{storageType}
</if>
<if test="storageRoom != null and storageRoom != '' ">
and storageRoom = #{storageRoom}
</if>
<if test="assetClass != null and assetClass != '' ">
and assetClass = #{assetClass}
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d')
</if>
</where>
<if test="materialCode == null or materialCode == '' ">
<if test="pnCode == null or pnCode == '' ">
<if test="storageType == null or storageType == '' ">
<if test="storageRoom == null or storageRoom == '' ">
<if test="createTime == null or createTime == '' ">
group by materialCode
</if>
</if>
</if>
</if>
</if>
</select>
主要内容:示例在 MyBatis 中除了使用 if+where 实现多条件查询,还有一个更为灵活的元素 trim 能够替代之前的做法。 trim 一般用于去除 SQL 语句中多余的 AND 关键字、逗号 或者给 SQL 语句前拼接 where、set 等后缀,可用于选择性插入、更新、删除或者条件查询等操作。trim 语法格式如下。 trim 中属性说明如下。 属性 描述 prefix 给SQL语句拼接的前缀,为
1. 前言 在前面的小节中,我们一起学习了 if 标签,在通过 if 判断动态插入或查询的时候容易产生多余的前缀(如 WHERE)或后缀(如 , ),为了解决这类问题 MyBatis 提供了 where、set、trim 三个实用的标签。 其中 where 和 set 标签都是 trim 标签的一种特殊情况,不过使用频率非常高,因此被单独定义成了标签。本小节我们将一起来学习它们。 2. 定义 慕课
本文向大家介绍Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解,包括了Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解的使用技巧和注意事项,需要的朋友参考一下 动态SQL就是动态的生成SQL。 if标记 假设有这样一种需求:查询用户,当用户名不等于“admin”的时候,我们还需要密码为123
问题内容: 我有以下字符串:“ BOB ”,如何修剪,使其显示为“ BOB” 我尝试了RTRIM(’BOB ‘,’‘),但由于显示仅需要1个参数而无法正常工作。 问题答案: 应该做。
本文向大家介绍MyBatis使用动态SQL标签的小陷阱,包括了MyBatis使用动态SQL标签的小陷阱的使用技巧和注意事项,需要的朋友参考一下 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plai
本文向大家介绍MyBatis的 config.xml标签,包括了MyBatis的 config.xml标签的使用技巧和注意事项,需要的朋友参考一下 以上所述是小编给大家介绍的MyBatis的 config.xml标签,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!