MySQL 较复杂sql记录&MyBatis的动态sql拼接

1.建表技巧 先复制其他表结构类似的表,然后修改

CREATE TABLE `device_camera` LIKE `device_bracelets`

2.一个表中id与父id建立关系

UPDATE `region_structure` a INNER JOIN `region_structure` b ON b.`name`=a.`parent_name` 
SET a.`pgid`=b.`gid`

3.把b表的数据更新到a表

UPDATE `region_resident_derived` a,`sheet` b  
SET a.`town` =b.town,a.`village`=b.village,a.`relationship`=b.relationship
WHERE a.`residentid` = b.`jmid` 

4.查询当前年份(今年)某月的数据

SELECT * FROM `activity_threemeetings`
WHERE YEAR(`begintime`)=YEAR(NOW())
AND MONTH(`begintime`)='11'

5.查询当前年份(今年)某天的数据

SELECT * FROM `region_resident` 
WHERE DATE_FORMAT(createtime,'%Y-%m-%d') = '2020-12-23'

6.格式化日期

SELECT DATE_FORMAT(createtime,'%Y-%m-%d') createtime 
FROM `region_resident`

7.将一张表里的数据插入到另一张表(未测试)

# 表结构一样
insert into1 select * from2

# 表结构不一样
insert into1 (列名1,列名2,列名3) select1,2,3 from2

# 只从另外一个表取部分字段
insert into1 (列名1,列名2,列名3) values(1,2,(select3 from2));

8.多字段模糊匹配

# 根据catelog_id查,并且用一个key搜索匹配多个字段
selectc * from pms_attr_group where catelog_id=? and (attr_group_id=key or attr_group_name like %key%)
# mybatis plus构造以上SQL内容(like为双百分号的,注意如果想写左右百分号就可以使用likeLeft或likeRight)
        String key = (String) params.get("key");
            // 有三级分类,我们按三级分类查
            // 并且要多字段模糊匹配:selectc * from pms_attr_group where catelog_id=? and (attr_group_id=key or attr_group_name like %key%)
            QueryWrapper<AttrGroupEntity> queryWrapper = new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId);
            if (StringUtils.isNoneBlank(key)) {
                // key不为空,继续构造
                queryWrapper.and(obj -> {
                    obj.eq("attr_group_id", key).or().like("attr_group_name", key);
                });
            }

            IPage<AttrGroupEntity> page = this.page(
                    new Query<AttrGroupEntity>().getPage(params), queryWrapper);
            return new PageUtils(page);

9.批量删除动态sql拼接(也可单个删除)

void deleteBatchRelation(@Param("relationList") List<AttrAttrGroupRelationDto> relationList);
    <!-- 删除属性与分组的关联关系 (注意separator=" or "留出空格) -->
    <delete id="deleteBatchRelation">
        DELETE
        FROM
	        pms_attr_attrgroup_relation
        WHERE
            <foreach collection="relationList" item="item" separator=" or ">
                attr_id = #{item.attrId} AND attr_group_id = #{item.attrGroupId}
            </foreach>
    </delete>
# 查询当前表名
select database()

# 查询某个表的字段信息
select 
	column_name, 
	(case when (is_nullable = 'no' AND column_key != 'PRI') then '1' else null end) as is_required, 
	(case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment, 
	(case when extra = 'auto_increment' then '1' else '0' end) as is_increment, 
	column_type
from information_schema.columns 
where table_schema = (select database()) and table_name = ('blade_notice')
order by ordinal_position

10.分组及分组拼接

分组及分组拼接前(不分组时):
在这里插入图片描述

分组及分组拼接后(去重):
在这里插入图片描述
分组及分组拼接SQL:

# GROUP_CONCAT(DISTINCT ssav.attr_value)为分组拼接函数,DISTINCT去重
# 注意:linux下不区分大小写,所以这儿起别名最好是下划线隔开,映射到实体类中也是没问题的
SELECT
	ssav.attr_id attr_Id,
	ssav.attr_name attr_name,
	GROUP_CONCAT(DISTINCT ssav.attr_value) attr_value 
FROM
	pms_sku_info info
	LEFT JOIN pms_sku_sale_attr_value ssav ON ssav.sku_id = info.sku_id
WHERE
	info.spu_id = 13
GROUP BY
	ssav.attr_id,
	ssav.attr_name

实体类:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值