在公司的业务杂记1之多选部门且主表没有部门字段(子表查询)

原型

在这里插入图片描述
1.新建,上传报告可多选部门
2.查询,可多选部门

数据库(Postgresql)

方式一 新增字段Jsonb:

CREATE TABLE public.admin_report (admin_report_uuid uuid DEFAULT gen_random_uuid() NOT NULL,admin_report_title text NULL,admin_report_theme_id int4 NULL,admin_report_link text NULL,create_time timestamptz DEFAULT now() NULL,update_time timestamptz DEFAULT now() NULL,admin_report_type_id int4 NULL,admin_report_id text NOT NULL,departments jsonb NULL,CONSTRAINT admin_report_admin_report_id_key UNIQUE (admin_report_id),CONSTRAINT admin_report_pkey PRIMARY KEY (admin_report_uuid),CONSTRAINT admin_report_to_admin_theme_id FOREIGN KEY (admin_report_theme_id) REFERENCES public.admin_theme(admin_theme_id) ON DELETE SET NULL ON UPDATE CASCADE,CONSTRAINT admin_report_to_report_type_id FOREIGN KEY (admin_report_type_id) REFERENCES public.admin_report_type(admin_report_type_id) ON DELETE SET NULL ON UPDATE CASCADE
);

在这里插入图片描述

class AdminReport(Base):__tablename__ = "admin_report"admin_report_uuid = sa.Column(UUID, nullable=False, server_default=func.gen_random_uuid(), primary_key=True)admin_report_title = sa.Column(sa.Text())admin_report_theme_id = sa.Column(sa.Integer(),sa.ForeignKey("admin_theme.admin_theme_id", onupdate="CASCADE", ondelete="SET NULL"),)admin_report_link = sa.Column(sa.Text())create_time = sa.Column(sa.TIMESTAMP(timezone="UTC"), server_default=func.now())update_time = sa.Column(sa.TIMESTAMP(timezone="UTC"), server_default=func.now())admin_report_type_id = sa.Column(sa.Integer(),sa.ForeignKey("admin_report_type.admin_report_type_id",onupdate="CASCADE",ondelete="SET NULL",),)admin_report_id = sa.Column(sa.Text(), nullable=False, unique=True)departments = sa.Column(sa.JSON)
func.jsonb_contains(models.AdminReport.departments, query.department_ids)
SELECT admin_report.admin_report_uuid, admin_report.admin_report_title, admin_report.admin_report_theme_id, admin_report.admin_report_link, admin_report.create_time, admin_report.update_time, admin_report.admin_report_type_id, admin_report.admin_report_id, admin_report.departments
FROM admin_report JOIN admin_theme ON admin_theme.admin_theme_id = admin_report.admin_report_theme_id
WHERE jsonb_contains(admin_report.departments, '7')  or jsonb_contains(admin_report.departments, '6') ORDER BY admin_report.create_time DESC

在这里插入图片描述

方式二 新建表,然后关联:

CREATE TABLE public.admin_report_department_r (admin_report_department_uuid uuid DEFAULT gen_random_uuid() NOT NULL,admin_report_id int4 NULL,department_id int4 NULL,create_time timestamptz DEFAULT now() NULL,update_time timestamptz DEFAULT now() NULL,del_flag int4 DEFAULT 0 NOT NULL
);

在这里插入图片描述

class AdminReportDepartmentR(Base):__tablename__ = "admin_report_department_r"__table_args__ = (sa.UniqueConstraint("admin_report_id", "department_id"),)admin_report_department_uuid = sa.Column(UUID, nullable=False, server_default=func.gen_random_uuid(), primary_key=True)admin_report_id = sa.Column(sa.String(64), nullable=False)department_id = sa.Column(sa.Integer(), nullable=False)create_time = sa.Column(sa.TIMESTAMP(timezone="UTC"), server_default=func.now())update_time = sa.Column(sa.TIMESTAMP(timezone="UTC"), server_default=func.now())del_flag = sa.Column(sa.Integer(), server_default="0", nullable=False)
    sub_expressions = []sub_expressions.append(models.AdminReportDepartmentR.del_flag == 0)if query.department_ids:admin_report_ids = db_session.execute(select(models.AdminReportDepartmentR.admin_report_id).distinct().filter(and_(models.AdminReportDepartmentR.department_id.in_(query.department_ids),models.AdminReportDepartmentR.del_flag == 0,))).all()admin_report_id_list = []if admin_report_ids is not None:admin_report_id_list = set([v for v, in admin_report_ids])sub_expressions.append(models.AdminReportDepartmentR.admin_report_id.in_(admin_report_id_list))sub_stmt = (select(models.AdminReportDepartmentR.admin_report_id,func.string_agg(sa.cast(models.AdminReportDepartmentR.department_id, sa.String),literal_column("','"),).label("department_list"),).select_from(models.AdminReportDepartmentR).filter(and_(True, *sub_expressions)).group_by(models.AdminReportDepartmentR.admin_report_id)).subquery()stmt = (select(models.AdminReport,sub_stmt.c.department_list,).join(models.AdminTheme).join(sub_stmt,sub_stmt.c.admin_report_id == models.AdminReport.admin_report_id,).filter(and_(True, *conditions)))
 SELECT admin_report.admin_report_uuid, admin_report.admin_report_title, admin_report.admin_report_theme_id, admin_report.admin_report_link, admin_report.create_time, admin_report.update_time, admin_report.admin_report_type_id, admin_report.admin_report_id, anon_1.department_list
FROM admin_report JOIN admin_theme ON admin_theme.admin_theme_id = admin_report.admin_report_theme_id JOIN (SELECT admin_report_department_r.admin_report_id AS admin_report_id, string_agg(CAST(admin_report_department_r.department_id AS VARCHAR), ',') AS department_list
FROM admin_report_department_r
WHERE admin_report_department_r.del_flag = 0 AND admin_report_department_r.admin_report_id IN ('B20240708171602_6740', 'B20240708171827_7231') GROUP BY admin_report_department_r.admin_report_id) AS anon_1 ON anon_1.admin_report_id = admin_report.admin_report_idWHERE admin_report.create_time >= :create_time_1 AND admin_report.create_time <= :create_time_2 ORDER BY admin_report.create_time DESCLIMIT :param_1 OFFSET :param_2 SELECT admin_report_department_r.admin_report_id AS admin_report_id, string_agg(CAST(admin_report_department_r.department_id AS VARCHAR), ',') AS department_list
FROM admin_report_department_r
WHERE admin_report_department_r.del_flag = 0 AND admin_report_department_r.admin_report_id IN ('B20240708171602_6740', 'B20240708171827_7231') GROUP BY admin_report_department_r.admin_report_id

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java —— JSP 技术

一、JSP &#xff08;一&#xff09;前言 1、.jsp 与 .html 一样属于前端内容&#xff0c;创建在 WebContent 之下&#xff1b; 2、嵌套的 java 语句放置在<% %>里面&#xff1b; 3、嵌套 java 语句的三种语法&#xff1a; ① 脚本&#xff1a;<% java 代码 %>…

安全防御第三天(笔记持续更新)

1.接口类型以及作用 接口 --- 物理接口 三层口 --- 可以配置IP地址的接口 二层口 普通二层口 接口对 --- “透明网线” --- 可以将一个或者两个接口配置成为接口对&#xff0c;则 数据从一个接口进&#xff0c;将不需要查看MAC地址表&#xff0c;直接从另一个接口出&#xff1b…

汇川CodeSysPLC教程 Modbus变量编址

线圈&#xff1a;位变量&#xff0c;只有两种状态0和1。汇川PLC中包含Q区及SM区等变量。 寄存器&#xff1a;16位&#xff08;字&#xff09;变量&#xff0c;本PLC中包含M区及SD区等变量 说明&#xff1a; 汇川HMI的专用协议使用不同功能码&#xff1a;在访问SM时&#xff0c…

Python--并发编程--协程

概念 协程是轻量级的线程&#xff0c;它是程序员管理的并发机制&#xff0c;使得在一个线程中程序可以在多个函数之间交替运行。 Python中主要通过asyncio模块实现协程。 协程函数 用async修饰的函数 import asyncio# func为协程函数 async def func():await asyncio.slee…

2024HW必修高危漏洞集合_v4.0

高危风险漏洞一直是企业网络安全防护的薄弱点&#xff0c;也成为HW攻防演练期间红队的重要突破口;每年 HW期间爆发了大量的高危风险漏洞成为红队突破网络边界防护的一把利器,很多企业因为这些高危漏洞而导致整个防御体系被突破、甚至靶标失守而遗憾出局。 HW 攻防演练在即&…

如何做一个透明度渐现且向上位移逐行出现的文字效果

前言 在这个夜黑风高的夜晚&#xff0c;你的眼睛已经开始有些疲惫。你的手指在键盘上轻轻地敲击着&#xff0c;仿佛在弹奏一首无声的夜曲。你的思绪在代码的海洋中飘荡&#xff0c;寻找着最后一行需要完成的代码。就在这时&#xff0c;你的老板走了过来&#xff0c;他的脸上带…

MySQL高级----InnoDB引擎

逻辑存储结构 表空间 表空间(ibd文件)&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储记录、索引等数据。 段 段&#xff0c;分为数据段&#xff08;Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment)&#xff0c;InnoDB是…

java 如何获取一个空的DATE对象

一&#xff1a;概述 在 Java 中&#xff0c;获取一个空的 Date 对象有多种方法。本文将介绍几种常用方法&#xff0c;并提供实际案例。 二&#xff1a;具体说明 <1>使用构造函数 Java 的 Date 类有多个构造函数&#xff0c;其中有一个无参构造函数&#xff0c;可以用于创…

文本到图像的革新:自动化Prompt优化的UF-FGTG框架

在文本到图像合成领域&#xff0c;已经能够由文本描述直接生成图像。然而&#xff0c;尽管这一技术带来了无限的可能性&#xff0c;它仍然面临着一个关键挑战&#xff1a;如何设计出能够引导模型生成高质量图像的提示&#xff08;prompts&#xff09;。尤其是对于初学者而言&am…

【ROS中Cjson文件的作用】

在ROS (Robot Operating System) 中&#xff0c;.json 文件通常用于存储配置信息、数据序列化或者在某些情况下用于网络通信和数据交换。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于…

数字身份管理发展趋势:​​​​​​扩展身份安全能力

身份作为企业各个应用的入口&#xff0c;大量存在于企业的内部业务和外部业务中&#xff0c;身份作为最核心数据对于企业的重要性不言而喻&#xff0c;因此也往往成为攻击者的攻击目标&#xff0c;从2023年国资国企受攻击的情况也不难看出&#xff0c;针对身份的攻击累计超过37…

白嫖A100活动来啦,书生·浦语大模型全链路开源体系

扫码参加即可获得&#xff1a; 第一节 书生浦语大模型全链路开源体系 书生浦语大模型的开源历程。 从模型到应用的典型流程 书生浦语的开源体系&#xff0c;包含从数据、预训练、微调、部署、评测、应用等环节

CC4利用链分析

我的Github主页Java反序列化学习同步更新&#xff0c;有简单的利用链图 分析版本 Commons Collections 4.0 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 在Commons Collections 4.0中&#xff0c;TransformingComparator类变为可序列化类&#xff0c;增…

Java学习高级二

Java是单继承的 Object类 方法重写 Java子类访问 – 就近原则 子类构造器的特点 多态 Java–final

机器学习之模型训练

前言 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 有了数据集和模型后&#xff0c;可以进行模型的训练与评估。 构建数据集 定义神经网络模型 class Network(nn.Cell):def __init__(sel…

AtCoder Beginner Contest 360

A - A Healthy Breakfast 枚举一下&#xff0c;只要R在M之前就行了 #include <iostream>using namespace std;int main() {char a,b,c;cin >> a >> b >> c;if((a R && (b M || c M)) || (b R && c M)){cout << "Yes…

【trition-server】运行一个pytorch的ngc镜像

ngc 提供了pytorch容器 号称是做了gpu加速的 我装的系统版本是3.8的python,但是pytorch似乎是用conda安装的3.5的: torch的python库是ls支持gpu加速是真的 英伟达的pytorch的说明书 root@a79bc3874b9d:/opt/pytorch# cat NVREADME.md PyTorch ======= PyTorch is a python …

顶会FAST24最佳论文|阿里云块存储架构演进的得与失-1.引言

今年早些时候&#xff0c;2月份举办的全球计算机存储顶会USENIX FAST 2024&#xff0c;最佳论文来自阿里云&#xff0c;论文名称《What’s the Story in EBS Glory: Evolutions and Lessons in Building Cloud Block Store》 &#xff0c;论文详尽地探讨了阿里云在过去十年中开…

HTML(28)——空间转换

空间&#xff1a;是从坐标轴角度定义的XYZ三条坐标轴构成了一个立体空间 Z轴位置与视线方向相同 空间转换 平移 属性&#xff1a; transform: translate3d(x,y,z);transform: translateX();transform: translateY();transform: translateZ(); 取值&#xff1a;像素单位数值…

国内教育科技公司自研大语言模型

好未来的数学大模型九章大模型&#xff08;MathGPT&#xff09; 2023年8月下旬&#xff0c;在好未来20周年直播活动中&#xff0c;好未来公司CTO田密宣布好未来自研的数学领域千亿级大模型MathGPT正式上线并开启公测。根据九章大模型的官网介绍&#xff0c;九章大模型&#xff…