多条SQL语句对查询结果集的垂直合并

首先我们先看一个需求

你有一个表用户表A 和一个用户详情表B 和一个销售单表C

A---->B 一对多关系   A---->C一对多关系

如果你select A  join B on(B和A的外键) 查询出2条记录结果集

如果你select A  join C on(C和A的外键) 查询出3条记录结果集

那你 如果你select A  join B on(B和A的外键)  join C on(C和A的外键) 查询出2*3=6条记录结果集

这个时候 如果select语句中有聚合函数(sum count )很可能导致查询的结果不符合需求的要求。

解决办法

1. 用两条sql查询 然后通过java对结果集进行合并(操作两条记录查询出来的两个List)。

缺点:如果需求含有分页和搜索。。。用java做不了

2. 用两条sql查询  然后就是用sql的垂直合并了

select * from (sql1) 别名1 join (sql2)别名2 on(你需求需要的条件) 就是把两条sql当成两个子查询

优点:解决了用java操作List进行合并,做不了分页搜索的问题。

工作中做某张报表的时候发现的。sql语句含有多个一对多关系的时候 注意影响聚合函数的结果。所以采用了先拆分sql,然后根据需求垂直合并。

原文地址:https://www.cnblogs.com/ssskkk/p/8548487.html

时间: 2024-10-16 11:03:56

多条SQL语句对查询结果集的垂直合并的相关文章

题目:写出一条SQL语句,查询工资高于10000,且与他所在部门的经理年龄相同的职工姓名。

create table Emp( eid char(20) primary key, ename char(20), age integer check (age > 0), did char(20), salary float,)create table Dept( did char(20) primary key, dname char(20), mgr_did char(20), )alter table Emp add constraint fk_emp_did foreign key

数据库 将多条SQL语句查询的内容整合成为一个元组

1.情景再现 分类信息 住户 租户 快递 亲友访问 花苑 138 25 44 89 新城 34 150 78 34 以上的一张表中,假如要分别在两个住宅小区统计各类进出的人数,进出的类型可以分为是住户,租户,快递以及亲友访问四个类型. 但是实际的表设计中,住户以及租户是属于这个小区,可以直接统计出来,但是快递以及亲友访问则需要从进出记录查找. 换言之,就是表中的每个元组的数据是从多个表中查出来的,同时可能是用四条sql语句中查询出来的.使用如下表达: ①: select t.name as co

树形结构表查询,只用一条SQL语句查询所有父级ID解决办法

在树形结构表查询中用得最多的就是查询指定分类的所有下级分类,这个性能比较好的解决方案是为分类加一个编码(路径)把父级的ID都拼接上,最后通过like 'x%'就能把所有下级分类select出来.但是有时也会遇到反过来,找出指定分类的所有上级分类,这个情况尤其在分销或类传销的系统中最常见,因为他们分成都是上级分成,所以要找出指定人的上级集合. 下面分享一下我的解决方案(只用一条SQL语句.不用存储过程.函数): 有下面所在的新闻分类表. ParentID为父级的ID. 下面要找出ID为52的所有上

jmeter中一次查询多条sql语句

1.在JDBC Connection Configuration 中Database URL 添加: ?allowMultiQueries=true 2.在测试计划页面添加一个用户定义的变量 3.测试计划里面定义的变量,在SQL Query 直接用${id}引用多条SQL语句时 Query Type: 选择[Callable Statement]注意:常使用的Query Type有Select Statement和Update Statement其中Select语句选择Select Statem

SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数

(二) SQL语句  模糊查询  空值处理  聚合函数 自己学习笔记,转载请注明出处,谢谢!---酸菜 SQL :结构化查询语言(Structured Query Language),关系数据库管理系统的标准语言. Sybase与Mircosoft对标准SQL做了扩展:T-SQL (Transact-SQL); 注:①SQL对大小写的敏感取决于排序规则,一般不敏感; ②SQL对单引号的转义,用两个单引号来表示一个单引号; ③SQL执行顺序: 1→2→3→4 select  * ---------

关于使用一条SQL语句 找出同时符合多个tag条件的记录集合算法

表结构 Tag Table:{tag_id, tag_name}  #标签表 News Table:{news_id, title,......}  #新闻表 NewsTags Table:{tag_id, news_id}  #新闻的标签关系表 解释: 一条新闻,有多个tag标签,例如: 新闻a{Tag1,Tag2, Tag3, Tag4} 新闻b{Tag1,Tag6, Tag7, Tag8} 新闻c{Tag8,Tag9, Tag10, Tag1} 新闻...{Tag..., .....} 搜

mysql -- 一次执行多条sql语句

最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.sql里的所有sql语句,这就涉及到执行多条语句的问题了.软件在CodeIgniter框架上开发的,CodeIgniter有封装好的执行sql语句的函数:$this->db->query('****'),但此函数一次只能执行一条sql语句.所以得另外想办法了.百度了下,找到了一些资料.multi_q

select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?

作为一名 Java开发人员,写 SQL 语句是常有的事,但是你知道 SQL 语句背后的处理逻辑吗?比如下面这条 SQL 语句: select * from user where id=1 执行完这条语句后,我们就会得到 id 为 1 的用户信息.那么对于这一条 SQL 语句,MySQL服务器做了哪些处理呢?这篇文章我们就一起打卡 MySQL 数据库中对 SQL 语句的处理逻辑. 了解 MySQL 数据库的 SQL 语句内部处理逻辑有什么好处?当我们碰到 MySQL 的一些异常或者问题时,就能够直

用一条SQL语句查出每门课都大于80分的学生的姓名

用一条sql语句查询出所有课程都大于80分的学生名单: name cource score 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 1 SET FOREIGN_KEY_CHECKS=0; 2 3 -- ---------------------------- 4 -- Table structure for grade 5 -- ---------------------------- 6 DROP TABL