将多个SQL查询合并的两种方式

说明:单个简单查询是非常容易的,但是为了避免多次访问访问数据库,我们会尽可能通过表关联将业务所需要的字段值一次性查出来。而有时候不太清楚表之间的关联关系(这取决于对业务的熟悉程度),或者实际情况就是少了一张关联表,导致我们不能通过关联表来查到我们所需要的字段值。这时就可以通过以下两种方式,将多个查询合并在一起。

以RBAC所需要的五张表为例,如果需要查询某人具备的角色、权限,可通两张关联表来实现

select t1.username, t3.name as role_name, t5.name as permission_name
from i_users t1left join i_user_roles_mapping t2 on t1.id = t2.user_nameleft join i_roles t3 on t2.role_name = t3.idleft join i_role_permissions_mapping t4 on t3.id = t4.role_nameleft join i_permissions t5 on t4.permission_name = t5.id
where t1.username = 'lisi'

在这里插入图片描述

但假设现在没有这两张mapping表,需要将以下三个查询合并成一个

select username from i_users where username = 'lisi';
select name as role_name from i_roles where id = '2';
select name as permission_name from i_permissions where id = '5';

如果用union all是一列,不是一行

select username from i_users where username = 'lisi'
union all
select name as role_name from i_roles where id = '2'
union all
select name as permission_name from i_permissions where id = '5';

在这里插入图片描述

这时就可以用下面这两种方式

方式一

通过子查询的方式,如下:

select t1.username, t2.name, t3.name
from (select * from i_users where username = 'lisi') t1,(select *  from i_roles where id = '2') t2,(select * from i_permissions where id = '5') t3;

方式二

使用with as,如下:

with t1 as (select * from i_users where username = 'lisi'
),
t2 as (select *  from i_roles where id = '2'
),
t3 as (select * from i_permissions where id = '5'
)
select t1.username, t2.name as role_name, t3.name as permission_name from t1, t2, t3;

以上两种方式的查询效果,等同于前面的关联查询,如下:

在这里插入图片描述

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

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

相关文章

2024年工程项目管理者的软件指南:11款必试进度管理工具

本文将分享11个值得关注的工程项目进度管理软件:Worktile、Fieldwire、Procore、Buildxact、InEight、Contractor Foreman、Housecall Pro、ClickUp、RedTeam Go、Visual Planning、B2W Schedule。 在竞争激烈的建筑行业,工程项目的进度管理是项目成功的…

超简洁Django个人博客系统(适合初学者)

一、环境介绍 Django4.2.13Markdown3.3.4PyMySQL1.1.1Python3.8PyCharm 2023.1.2 (Professional Edition) 二、功能简介 用户登录 通过在pycharm终端执行以下命令创建超级管理员。python manage.py create createsuperuser 创建完成后再通过新建的超级管理员账号进行登录 …

CentOS7.9下yum升级Apache HTTP Server2.4.6到2.4.60

CentOS7.9系统默认的Apache版本 在CentOS7.9上,如果使用yum安装Apache HTTP Server是最多到2.4.6版本的,这是因为el7下官方仓库的最高版本就是2.4.6,证据如下: $ yum info httpd ...... Installed Packages Name : httpd…

深入解析:Java爬虫的本质是什么?

深入解析:Java爬虫的本质是什么? 引言: 随着互联网的快速发展,获取网络数据已成为许多应用场景中的重要需求。而爬虫作为一种自动化程序,能够模拟人类浏览器的行为,从网页中提取所需信息,成为了…

ROS2使用C++开发动作通信

1.开发接口节点 cd chapt4_ws/ ros2 pkg create robot_control_interfaces --build-type ament_cmake --destination-directory src --maintainer-name "joe" --maintainer-email "1027038527qq.com" mkdir -p src/robot_control_interfaces/action touch…

ATFX汇市:欧元区CPI与失业率数据同时发布,欧元或迎剧烈波动

ATFX汇市:CPI数据是中央银行决策货币政策的主要依据,失业率数据是中央银行判断劳动力市场健康状况的核心指标。欧元区的CPI和失业率数据将在今日17:00同时发布,在欧央行6月6日降息一次的背景下,两项数据将显著影响国际市场对欧央行…

02归并排序——分治递归

02_归并排序_——分治_递归_ #include <stdio.h>void merge(int arr[], int l, int m, int r) {int n1 m -l 1;int n2 r -m;//创建临时数组int L[n1], R[n2];for(int i 0; i < n1; i){L[i] arr[l i];}for(int j 0; j < n2; j){R[j] arr[m 1 j];}int i …

mp4格式怎么转换成mp3格式,简鹿格式工厂轻松转换

mp4格式怎么转换成mp3格式&#xff1f;MP3主要关注音频内容的压缩与传播&#xff0c;而MP4则是一个更为复杂的多媒体容器&#xff0c;能够包含视频、音频等多种媒体流&#xff0c;适合于现代多样化的媒体消费场景。 而有一些视频中的音频可能深受用户喜爱&#xff0c;可是如何…

分布式锁的详细解析

分布式锁工具 一、背景 当前问题&#xff1a;项目中会使用到分布式锁用于定时任务、接口幂等性处理&#xff0c;但是分布式锁的实现较简单&#xff0c;会出现执行超时、加解锁失败等场景。分布式锁都有哪些实现&#xff0c;他们的优劣势是什么呢&#xff1f; 二、现有技术 分…

snowflake 不再是个数据仓库公司了

标题先上结论&#xff0c;为啥这么认为&#xff0c;且听接下来道来。 snowflake 非常成功&#xff0c;开创了云数仓先河&#xff0c;至今在数仓架构上也是相对比较先进的&#xff0c;国内一堆模仿的公司&#xff0c;传统上我们会认为 snowflake 肯定是一家数据仓库公司。不过最…

网络攻防题录集

文章目录 第一章 网络攻防概述第二章 密码学第三章 网络协议脆弱性分析第四 自测题三第五章 自测题五第六章 自测题六第七章 自测题七第八章 自测题八第九章 自测题九第十章 自测题十第十一章 自测题十一第十二章 自测题十二第十三章 自测题十三 第一章 网络攻防概述 第一代安…

JavaSEJava8 时间日期API + 使用心得

文章目录 1. LocalDate2. LocalTime3. LocalDateTime3.1创建 LocalDateTime3.2 LocalDateTime获取方法 4. LocalDateTime转换方法4.1 LocalDateTime增加或者减少时间的方法4.2 LocalDateTime修改方法 5. Period6. Duration7. 格式转换7.1 时间日期转换为字符串7.2 字符串转换为…

linux的Top学习

学习文档 https://www.cnblogs.com/liulianzhen99/articles/17638178.html TOP 问题 1&#xff1a;top 输出的利用率信息是如何计算出来的&#xff0c;它精确吗&#xff1f; top 命令访问 /proc/stat 获取各项 cpu 利用率使用值内核调用 stat_open 函数来处理对 /proc/sta…

AcWing 1256:扩展二叉树

【题目来源】https://www.acwing.com/problem/content/1258/【题目描述】 由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树&#xff0c;所以对二叉树做如下处理&#xff0c;将二叉树的空结点用 补齐&#xff0c;如图所示。 我们把这样处理后的二叉树称为原二叉树…

零知识证明技术:隐私保护的利器

在当今信息时代&#xff0c;数据安全和隐私保护的重要性日益凸显。随着技术的发展&#xff0c;密码学在保障信息安全方面发挥着越来越重要的作用。其中&#xff0c;零知识证明技术作为一种新兴的密码学方法&#xff0c;为隐私保护提供了强有力的支持。本文将简要介绍零知识证明…

3.js - premultiplyAlpha

你瞅啥啊&#xff01;&#xff01;&#xff01; 先看效果图吧 代码 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/ex…

pycharm中新建的临时python文件存放在哪里?

在pycharm中建立的临时python文件&#xff0c;从哪里可以找到呢&#xff1f; 1.我们打开cmd窗口&#xff0c;进入根目录&#xff0c;用dos命令“dir scratch*.py/a/s”进行查找&#xff0c;发现这些临时文件存放在Roaming\JetBrains\PyCharmCE2022.2\scratches 的目录里面 2.…

我全都要,全网聚合神器!绝了!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 现在有不少开发者都会以“壳源”的方式&#xff08;如TVBox、阅读APP等&#xff09;&#xff0c;为用户提供了更为灵活性的选择。 而今天给大家安利的是一款“壳源”的聚合神器&#…

Profibus DP主站转Modbus网关连接智能化电表通讯

Profibus DP主站转Modbus网关&#xff08;XD-MDPBM20&#xff09;&#xff0c;是实现不同工业通信协议之间互联互通的设备&#xff0c;主要将Profibus DP协议转换为Modbus协议&#xff0c;实现数据的双向传输。通过Profibus DP主站转Modbus网关&#xff08;XD-MDPBM20&#xff…

记一次阿里云服务器java应用无法响应且无法远程连接的问题排查

问题表现 java服务无响应&#xff0c;无法远程链接到服务器。 今天中午12点多&#xff0c;应用直接崩溃。后续进入到服务器&#xff0c;发现java进程都不在了&#xff0c; 排查过程 先安装atop工具 安装、配置并使用atop监控工具 等下次再出现时看相关时间点日志&#xff…