当前位置: 首页 > news >正文

SQL笛卡尔积运用-为每个用户初始化数据

需求

假设有个业务需求,是要给每个用户初始化入口。 比如“HR系统”,“财务系统”,其他的用户登录后自行添加。

表结构: 用户表(sys_user), 模块项表(portal_item), 用户个性化关联表(关联表)

思路

  1. 如果单个用户添加的话,很简单:
INSERT INTO portal_dthn.portal_user_item ("ID", "USER_ID", "ITEM_ID", "ITEM_TYPE_ID", "ORG_ID", "CREATE_BY", "CREATE_NAME", "CREATE_TIME", "UPDATE_BY", "UPDATE_NAME", "UPDATE_TIME", "VERSION", "DEL_FLAG", item_sort) VALUES('4b3dbc5274ce6983186afaba8cf43dee', '1759875209759367169', '100002', '1727141210439102466', '1759874832225869827', 'system', '系统自动创建', '2025-04-25 09:50:20.000', 'system', '系统自动更新', '2025-04-25 09:50:20.000', 1, '0', 0);
  1. 如果为多个用户添加单个的话可以用 insert…select
INSERT INTO portal_dthn.portal_user_item 
("ID", "USER_ID", "ITEM_ID", "ITEM_TYPE_ID", "ORG_ID", "CREATE_BY", "CREATE_NAME", "CREATE_TIME", "UPDATE_BY", "UPDATE_NAME", "UPDATE_TIME", "VERSION", "DEL_FLAG", "item_sort")
SELECT -- 生成唯一ID(使用MD5哈希)MD5(u."ID" || items."ITEM_ID" || random()::text) AS "ID",u."ID" AS "USER_ID",'100002' as "ITEM_ID",'1727141210439102466' AS "ITEM_TYPE_ID",  -- 固定值,同示例'1759874832225869827' AS "ORG_ID",       -- 固定值,同示例'system' AS "CREATE_BY",                  -- 示例中使用NULL,但字段不能为空,设为system'系统自动创建' AS "CREATE_NAME",           -- 示例中使用NULL,但字段不能为空CURRENT_TIMESTAMP AS "CREATE_TIME",       -- 示例中使用NULL,但字段不能为空,设为当前时间'system' AS "UPDATE_BY",                  -- 示例中使用NULL,但字段不能为空'系统自动更新' AS "UPDATE_NAME",           -- 示例中使用NULL,但字段不能为空CURRENT_TIMESTAMP AS "UPDATE_TIME",       -- 示例中使用NULL,但字段不能为空1 AS "VERSION",                           -- 固定值,同示例'0' AS "DEL_FLAG",                        -- 固定值,同示例1 AS "item_sort"                         -- 
FROM sys_user u
  1. 如果是添加多个系统入口的话, 可以把上边的复制几次运行,或者是用 cross_join 笛卡尔积关联,为每个用户,关联多个系统
-- 为所有用户插入6个模块,包含所有必要字段
INSERT INTO portal_dthn.portal_user_item 
("ID", "USER_ID", "ITEM_ID", "ITEM_TYPE_ID", "ORG_ID", "CREATE_BY", "CREATE_NAME", "CREATE_TIME", "UPDATE_BY", "UPDATE_NAME", "UPDATE_TIME", "VERSION", "DEL_FLAG", "item_sort")
SELECT -- 生成唯一ID(使用MD5哈希)MD5(u."ID" || items."ITEM_ID" || random()::text) AS "ID",u."ID" AS "USER_ID",items."ITEM_ID",'1727141210439102466' AS "ITEM_TYPE_ID",  -- 固定值,同示例'1759874832225869827' AS "ORG_ID",       -- 固定值,同示例'system' AS "CREATE_BY",                  -- 示例中使用NULL,但字段不能为空,设为system'系统自动创建' AS "CREATE_NAME",           -- 示例中使用NULL,但字段不能为空CURRENT_TIMESTAMP AS "CREATE_TIME",       -- 示例中使用NULL,但字段不能为空,设为当前时间'system' AS "UPDATE_BY",                  -- 示例中使用NULL,但字段不能为空'系统自动更新' AS "UPDATE_NAME",           -- 示例中使用NULL,但字段不能为空CURRENT_TIMESTAMP AS "UPDATE_TIME",       -- 示例中使用NULL,但字段不能为空1 AS "VERSION",                           -- 固定值,同示例'0' AS "DEL_FLAG",                        -- 固定值,同示例items."item_sort"                         -- 从关联表获取
FROM sys_user u
CROSS JOIN (-- 定义要添加的6个模块SELECT '100002' AS "ITEM_ID", 0 AS "item_sort" UNION ALLSELECT '100013', 1 UNION ALLSELECT '100027', 2 UNION ALLSELECT '100031', 3 UNION ALLSELECT '1762661342671032321', 4 UNION ALLSELECT '1760589482261319682', 5
) AS items
WHERE NOT EXISTS (-- 避免重复插入已存在的记录SELECT 1 FROM portal_dthn.portal_user_item pui WHERE pui."USER_ID" = u."ID" AND pui."ITEM_ID" = items."ITEM_ID"
);
http://www.xdnf.cn/news/133291.html

相关文章:

  • [Windows] 卡巴斯基Kaspersky 21.21.7.384 免费版
  • 基于Axure的动态甘特图设计:实现任务增删改与时间拖拽交互
  • 打工人必看:Word中姓名对齐的高效方法
  • 计算器(WEB)
  • PWNOS:2.0(vulnhub靶机)
  • Java知识日常巩固(五)
  • 在GNS3中安装Kali Linux
  • 【深度好文】2、深入浅出 Milvus 数据库管理:从创建到删除的完整指南
  • spark-standalone模式
  • 设置Rocky Linux盒盖不休眠的3个简单步骤
  • 常见的几种分块策略,每种策略都有适用场景和优缺点
  • 题目 3320: 蓝桥杯2025年第十六届省赛真题-产值调整
  • 【爬虫】DrissionPage-获取douyim用户下的视频
  • 论文阅读:2024 NeurIPS Group Robust Preference Optimization in Reward-free RLHF
  • 幻读是什么项目中是怎么保证不会出现幻读
  • 高级电影感户外街拍人像摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • Gartner魔力象限(Gartner Magic Quadrant)
  • 你怎么通过postman或者fidder或者JMeter来获取到token,然后后面的请求怎么使用token
  • 银行网点款箱交接权限认证开锁与密钥时效双重监控
  • AI超级智能体教程(三)---程序调用AI大模型的四种方式(SpringAI+LangChain4j+SDK+HTTP)
  • 电子设备的“记忆大脑”:NAND、NOR、EEPROM谁在掌控你的数据?
  • 一文带你了解单例模式及其逐步优化~
  • 【差分隐私】假设检验的视角(高斯差分隐私)
  • 07 Python 字符串全解析
  • 基于LAB颜色空间的增强型颜色迁移算法
  • [Mybatis-plus]
  • IEEE期刊目录重磅更新!共242本期刊被收录!
  • ubuntu22.04部署Snipe-IT
  • C++初登门槛
  • Unreal制作角色冲锋时冲击波效果