提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
工作中一些mysql语法稍微难点的用法记录。
提示:以下是本篇文章正文内容,下面案例可供参考
一、select in (select)。in条件后面连接子查询
SELECT
comm.stc_id AS ID,
comm.stc_user_id AS commentUserId,
USER.weu_alias AS commentUsername,
USER.weu_avatar AS commentUserAvatar,
comm.stc_content AS comments,
timestampdiff( MINUTE, comm.stc_datetime, now( ) ) AS commentTime,
comm.stc_target AS target,
comm.stc_target_id AS targetId
FROM
staff_comments comm
LEFT JOIN wecom_user USER ON comm.stc_user_id = USER.weu_userid
WHERE
comm.stc_target_id IN ( 1, ( SELECT stc_id FROM ( SELECT stc_id FROM staff_comments WHERE stc_target_id = 1 ) AS tab ) )
结果:
分析:
一、replace() 函数
场景如下:今天要从数据库查询一个yyyy-MM-dd HH:mm:ss格式的日期。
2022-08-21T14:44:54,这个值怎么多了个T?这肯定要不得,咋办?
思路一:业务层拿到值,用String的split()方法根据T拆分,然后拼接。太麻烦了,不愿意。
思路二:使用Mybatis的replace()方法,将T替换成" "这样的空串。
替换成功。sql语法如下:
SELECT
spl_total AS total,
replace(spl_datetime,"T", "") AS datetime,
spl_point AS point,
spl_description AS description,
spl_type AS type
FROM
staff_points_list
<where>
spl_user_id = #{userId}
<if test="type == 2">
AND spl_point > 0
</if>
<if test="type == 3">
AND spl_point < 0
</if>
</where>
ORDER BY spl_datetime DESC
分析replace(参数一,参数二,参数三):
参数一:表示要操作的字段名称,
参数二:表示要将哪个值或者哪个字替换掉
参数三:表示替换成什么值。
PS:AND spl_point > 0 和 AND spl_point < 0 看到这两句有点懵?其实一开始我是写成这样的:AND spl_point > 0 和 AND spl_point < 0。什么原理我也不清楚,反正就是要转义。所以:
> 表示 >
< 表示 <
总结
持续更新。。。