MySQL语句复杂业务场景解决案例

查询场景

日期和时间的查询

查询表1中创建时间小于或等于指定时间的数据

and DATE_FORMAT(1.create_date, '%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{入参.date}, '%Y-%m-%d')

解读

DATE_FORMAT(参数,'精度'),用于 mybatis在处理sql的时候,按照年月日的格式去处理参数

  • ‘%Y-%m-%d %H:%i:%S’ 匹配到秒钟
  • ‘%Y-%m-%d %H:%i’ 匹配到分钟
  • ‘%Y-%m-%d %H’ 匹配到小时
  • ‘%Y-%m-%d’ 匹配到天
  • ‘%Y-%m’ 匹配到月
  • ‘%Y’ 匹配到年

<![CDATA[ 需要转译的字符 ]]>,被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”。

  • 此标记用于xml文档中,我们先来看看使用转义符的情况。我们知道,在xml中,”<”、”>”、”&”等字符是不能直接存入的,否则xml语法检查时会报错,如果想在xml中使用这些符号,必须将其转义为实体,如”<”、”>”、”&”,这样才能保存进xml文档。

自定义指定字段的内容排序

通常排序都可以通过关键字 order by 搭配 desc 来实现,如

SELECT ro.* FROM rebate_order ro
	LEFT JOIN rebate_order_detail rod ON ro.id = rod.rebate_order_id
WHERE rod.history_order_no like CONCAT('%', #{vo.historyOrderNo},'%')
GROUP BY ro.id order by ro.create_time desc

但是这里要讲的是特殊场景,比如订单的状态:草稿、已提交、已审核 在数据库中存的不是数值类型012,而是字符类型的(“草稿”, “已提交”, “已审核”),这时需要你根据订单状态来将查询结果进行排序
用到关键字 filed ()

SELECT ro.* FROM rebate_order 
order by filed(order_status,'已审核','已提交','草稿')

这样就能根据指定字段的内容进行排序

插入场景

修改场景

一对多关系,

将主表中字段A的数据 刷新到子表中 为空的字段b

update 子表名 as1
    inner join (
    select2.id,2.字段A
    from 主表名 as2
    left join 子表名 as2 on2.id =2.主_id
    where (2.字段b is null or2.字段b = '')
    and2.字段A is not null
    )1
on1.id =1.主_id
    set1.字段b =1.字段A;

解读

inner join :内关联,作用类似于and条件
通过嵌套查询过滤出符合条件的主表ID和目标字段
在修改子表字段b时,我们需要先通过子表中的主表ID找到对应的主表,
为了预防主表中的字段A是null时将子表的字段b全刷成null,所以这里我们增加了一个判断 -》
当且仅当主表字段A不为null,且子表字段b是空的时候,才将主表的数据刷新到子表

删除场景

持续更新…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值