Mysql使用记录

场景一  $符号的使用

要查询 修改时间在 beginTime 和 endTime 之间的数据,同时查询时间 < beginTime的第一个, 和 > endTime的第一个。

脑洞打开,想着怎么通过一个sql来完成,再不济也可以通过一个sql,复用几次。

最后发现,查询 beginTime 和 endTime之间的只能单独用一个sql。   另外两个可以复用一个sql,代码如下

//传<
TemplatePo littleTimeTemplate = templateDao.queryTempalteTime(templateUsedQueryDto, "<");

//传>
TemplatePo littleTimeTemplate = templateDao.queryTempalteTime(templateUsedQueryDto, ">");



//mybatis代码, 这里用 ${} 接收 < 和 >, 用#{} 接收正常参数

<select id="queryTempalteTime" resultType="com.shuidihuzhu.cs.servicesummary.po.TemplatePo">
    select t.*
      from template t left join template_skill_group_relation tsgr on t.id = tsgr.skill_group_id
      where tsgr.skill_group_id = #{templateUsedQueryDto.skillGroupId}
      and t.create_time ${s} #{templateUsedQueryDto.beginTime} order by create_time desc limit 1
  </select>

mybatis中,#{} 是预编译, ${} 是直接编译,打印出来的代码如下

select t.* from template t left join template_skill_group_relation tsgr on t.id = tsgr.skill_group_id where tsgr.skill_group_id = ? and t.create_time < ? order by create_time desc limit 1

注意,${ } 的部分,直接显示出 "<", #{} 的部分先是通过? 占位,然后传参的方式

查询出数据库同一个字段,记录数大于1的记录

使用子查询和分组

# 通过对session_id 分组,然后查出记录重复的session_id  
# 关键字  grouping by + having

select session_id from session_chat where session_id in (1,2,3) group by session_id having count(session_id)>1) ORDER BY session_id, create_time asc


# 完整sql

select session_id, agent_name from session_chat where session_id in (select session_id from session_chat where session_id in () group by session_id having count(session_id)>1) ORDER BY session_id, create_time asc;

关键字 grouping by + having 

根据Where中in的顺序排序

SELECT
	*
FROM
	tb_merchant AS t
WHERE
	t.id IN (20,16,35,100,201,131) order by FIELD(id, 20,16,35,100,201,131);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值