注:工作几年,发现自己对sql书写能力还是有点缺陷的。所以记录工作中一些觉得有用的sql,供以后工作学习使用。
1. sql
此sql 使用到 if函数 replace 函数
(1)IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
(2) replace(object,search,replace) 把object中出现search的全部替换为replace
(3) concat函数可以连接一个或者多个字符串
(4) JSON_EXTRACT函数,截取数据库中指定字段中存储的json数据中的某个字段对应的值
CREATE TABLE `product` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '课包名称',
`type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型:1-主题课,
`intro_photo` json DEFAULT NULL COMMENT '课包图片介绍',
`list_photo` varchar(255) NOT NULL DEFAULT '' COMMENT '列表图',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=522 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='产品表';
其中此字段为:
intro_photo = ["ht.jpg", "http://fabl.jpg"]
select
p.id,
p.`name`,
p.`type`,
p.price,
IF(p.list_photo = '',REPLACE(JSON_EXTRACT(p.intro_photo, '$[0]'),'"',''),p.list_photo) photo
from product p
<if test="useType != null and useType == 2">
inner join coupon_vip_item_relation cvir on p.id = cvir.item_id
and cvir.type = 1
and cvir.object_id = #{couponId}
and cvir.status = 0
</if>
where delete_status = 0
and shelf_status = 2
and p.type = #{type}
<if test="name != null and name != ''">
and name like concat('%', #{name}, '%')
</if>