天道酬勤,学无止境

将 2 个 SQL SELECT 结果集合并为一个(Joining 2 SQL SELECT result sets into one)

问题

我有 2 个选择语句,返回这样的数据:

Select 1
col_a   col_b

Select 2
col_a   col_c

如果我做工会,我会得到类似的东西

col_a col_b

和行加入。 我需要的是这样的:

col_a  col_b  col_c

加入col_a数据

回答1

使用 JOIN 连接子查询并使用 ON 说明每个子查询中的行必须匹配的位置:

SELECT T1.col_a, T1.col_b, T2.col_c
FROM (SELECT col_a, col_b, ...etc...) AS T1
JOIN (SELECT col_a, col_c, ...etc...) AS T2
ON T1.col_a = T2.col_a

如果 col_a 的某些值在 T1 中但不在 T2 中,则可以改用 LEFT OUTER JOIN。

回答2

使用完全外连接:

select 
   a.col_a,
   a.col_b,
   b.col_c
from
   (select col_a,col_bfrom tab1) a
join 
   (select col_a,col_cfrom tab2) b 
on a.col_a= b.col_a
回答3
SELECT table1.col_a, table1.col_b, table2.col_c 
  FROM table1 
  INNER JOIN table2 ON table1.col_a = table2.col_a
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在联接两个视图的SQL Server 2005存储过程中使用PIVOT(How to use PIVOT in SQL Server 2005 Stored Procedure Joining Two Views)
    问题 早上好, 我有2个视图:ICCUDays每个帐户包含一个记录,具有ACCOUNT和ICCUDays字段; ICCUEnctrSelectedRevCatsDirCost,每个帐户包含多个记录,具有ACCOUNT,UBCATEGORY和DirectCost字段。 我的目标:创建一个存储过程,用UBCATEGORY通过ICCUDays和DirectCost为每个ACCOUNT输出一个记录。 这将是一个交叉表或枢轴,并且必须考虑在一个或多个直接成本ubcategory存储桶中可能存在null的可能性。 最后,此交叉表或数据透视表需要发送到新表EnctrUBCatPivot。 问题:以上情况下正确的PIVOT语法是什么? 鉴于我想为许多UBCATEGORY条目输入直接成本,我该如何编写TSQL来对这些条目进行迭代并通过帐户和UBCATEGORY进行透视? 所有这些都是在一个存储过程中完成的,还是必须将其分成多个存储过程才能将结果写到表中? 这是我到目前为止编写的代码: ALTER PROCEDURE [dbo].[spICCUMain] -- Add the parameters for the stored procedure here AS declare @columns varchar(8000) BEGIN -- SET NOCOUNT ON added to
  • 从集合/数组/列表创建逗号分隔的字符串的最复杂的方法?(The most sophisticated way for creating comma-separated Strings from a Collection/Array/List?)
    问题 在使用数据库的过程中,我注意到我写了查询字符串,并且在此字符串中,我必须对列表/数组/集合的where子句施加一些限制。 应该看起来像这样: select * from customer where customer.id in (34, 26, ..., 2); 您可以通过将其简化为以下问题来简化此问题:您具有字符串集合,并且只想在一个字符串中创建一个以逗号分隔的字符串列表。 到目前为止,我使用的方法是这样的: String result = ""; boolean first = true; for(String string : collectionOfStrings) { if(first) { result+=string; first=false; } else { result+=","+string; } } 但这就像您看到的非常难看。 您乍看之下看不到会发生什么,尤其是当构造的字符串(如每个SQL查询)变得复杂时。 您的(更多)优雅方式是什么? 回答1 注意:这个答案在11年前写的时候是不错的,但是现在有更好的选择可以更清晰地在一行中执行此操作,无论是仅使用Java内置类还是使用实用程序库。 请参阅下面的其他答案。 由于字符串是不可变的,因此如果要在代码中更改String,则可能要使用StringBuilder类。
  • 将Hibernate查询结果映射到自定义类?(mapping Hibernate query results to custom class?)
    问题 跟进我昨天发布的一个问题:如何从自定义的Hibernate查询中填充POJO类? 有人可以向我展示如何在Hibernate中编写以下SQL并正确获取结果的示例吗? SQL: select firstName, lastName from Employee 如果可能的话,我想做的就是将结果放入自己的基类中: class Results { private firstName; private lastName; // getters and setters } 我相信在JPA(使用EntityManager )中是可能的,但是我还没有弄清楚如何在Hibernate(使用SessionFactory和Session )中做到这一点。 我试图更好地学习Hibernate,即使这个“简单”查询也令人困惑,无法知道Hibernate以哪种形式返回结果,以及如何将结果映射到我自己的(基)类中。 因此,在DAO例程结束时,我将执行以下操作: List<Results> list = query.list(); 返回Results List (我的基类)。 回答1 select firstName, lastName from Employee query.setResultTransformer(Transformers.aliasToBean(MyResults.class))
  • Criteria API 返回的结果集太小(Criteria API returns a too small resultset)
    问题 这怎么可能,我必须遵循以下标准 Criteria criteria = getSession().createCriteria(c); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Restrictions.eq("active",true)); List list = criteria.list(); 列表的大小现在是 20。如果我将最大结果添加到条件中, Criteria criteria = getSession().createCriteria(c); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.setMaxResults(90); criteria.add(Restrictions.eq("active",true)); List list = criteria.list(); .. 现在列表的大小是 18! 我不明白定义最大结果后结果集的大小如何变小,因为行数小于定义的最大值。 这确实看起来像是一个错误,或者还有一些我不知道的休眠的奇怪方面吗? 如果您正在寻找此问题的答案,请务必阅读已接受的答案及其评论。 回答1 通过在 Hibernate 中打开 SQL
  • Mybatis学习笔记——三、多对一、一对多和动态sql
    文章目录 10、多对一处理(day02_01mybatis)10.1、测试环境搭建10.2、按照嵌套查询处理10.3、按照联表查询处理 11、一对多处理(day02_02mybatis)11.1、测试环境搭建11.2、按照嵌套查询处理10.3、按照联表查询处理 12、动态SQL(day02_03mybatis)12.1、搭建环境12.2、if12.3、choose(when,otherwise)12.4、trim(where, set)12.5、sql和include12.6、foreach 10、多对一处理(day02_01mybatis) 10.1、测试环境搭建 创建老师、学生实体类 /** * @author ajacker * 学生实体类 */ public class Student { private int id; private String name; private Teacher teacher; /** * 省略getter setter toString */ } /** * @author ajacker * 老师实体类 */ public class Teacher { private int id; private String name; /** * 省略getter setter toString */ } 创建对应的IStudentDao
  • JPA:如何将本机查询结果集转换为POJO类集合(JPA : How to convert a native query result set to POJO class collection)
    问题 我在我的项目中使用JPA。 我来到一个查询,其中我需要对五个表进行联接操作。 因此,我创建了一个本机查询,该查询返回五个字段。 现在,我想将结果对象转换为包含相同五个String的java POJO类。 JPA中有什么方法可以将结果直接转换为POJO对象列表? 我来到以下解决方案.. @NamedNativeQueries({ @NamedNativeQuery( name = "nativeSQL", query = "SELECT * FROM Actors", resultClass = db.Actor.class), @NamedNativeQuery( name = "nativeSQL2", query = "SELECT COUNT(*) FROM Actors", resultClass = XXXXX) // <--------------- problem }) 现在在resultClass中,我们是否需要提供一个实际的JPA实体类? 或者我们可以将其转换为包含相同列名的任何JAVA POJO类吗? 回答1 JPA提供了一个SqlResultSetMapping,它允许您将本机查询返回的任何内容映射到一个Entity中。 或自定义类 。 EDIT JPA 1.0不允许映射到非实体类。 仅在JPA 2.1中
  • Linq详细案例
    LINQ to SQL语句 LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能。 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句。Where操作包括3种形式,分别为简单形式、关系条件形式、First()形式。下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c; 再如:筛选1994 年或之后雇用的雇员: var q = from e in db.Employees where e.HireDate >= new DateTime(1994, 1, 1) select e; 2.关系条件形式: 筛选库存量在订货点水平之下但未断货的产品: var q = from p in db.Products where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued select p; 筛选出UnitPrice 大于10 或已停产的产品: var q = from p in db.Products where p.UnitPrice > 10m || p.Discontinued select p
  • SQL Server FOR EACH循环(SQL Server FOR EACH Loop)
    问题 我有以下SQL查询: DECLARE @MyVar datetime = '1/1/2010' SELECT @MyVar 这自然会返回“ 1/1/2010”。 我要做的是列出日期,例如: 1/1/2010 2/1/2010 3/1/2010 4/1/2010 5/1/2010 然后,我想通过数字逐个运行SQL查询。 类似于(伪代码): List = 1/1/2010,2/1/2010,3/1/2010,4/1/2010,5/1/2010 For each x in List do DECLARE @MyVar datetime = x SELECT @MyVar 因此,这将返回: 1/1/2010 2/1/2010 3/1/2010 4/1/2010 5/1/2010 我希望这将数据作为一个结果集而不是多个结果集返回,因此我可能需要在查询的末尾使用某种类型的并集,因此将循环并集的每次迭代都移至下一个。 编辑 我有一个大型查询,它接受一个'to date'参数,我需要运行24次,每次都有一个我需要提供的特定日期(这些日期将是动态的),我想避免将工会全都加入其中,重复24次查询,好像我需要返回并添加其他列一样,这将非常耗时。 回答1 SQL主要是一种面向集合的语言-在其中使用循环通常是个坏主意。 在这种情况下,使用递归CTE可以达到类似的结果: with cte as
  • 连接来自两个单独数据库的结果(Joining Results from Two Separate Databases)
    问题 是否可以从两个独立的postgres数据库中JOIN行? 我正在在一台服务器上使用带有几个数据库的系统,有时我确实需要这样的功能。 回答1 根据http://wiki.postgresql.org/wiki/FAQ 除了当前数据库外,没有其他方法可以查询数据库。 由于PostgreSQL加载特定于数据库的系统目录,因此无法确定跨数据库查询的行为。 contrib / dblink允许使用函数调用进行跨数据库查询。 当然,客户端也可以同时连接到不同的数据库,并在客户端上合并结果。 编辑:3年后(2014年3月),此常见问题解答条目已被修改,它会更有用: 如何使用多个数据库执行查询? 除了当前数据库外,没有其他方法可以直接查询数据库。 由于PostgreSQL加载特定于数据库的系统目录,因此无法确定跨数据库查询的行为。 PostgreSQL中的SQL / MED支持允许创建“外部数据包装器”,从而将远程数据库中的表链接到本地​​数据库。 远程数据库可以是同一PostgreSQL实例上的另一个数据库,也可以是世界各地的数据库,这无关紧要。 postgres_fdw内置于PostgreSQL 9.3,并包括读/写支持; 可以编译9.2的只读版本并将其作为contrib模块安装。 contrib / dblink允许使用函数调用进行跨数据库查询
  • Hibernate Criteria使用FetchType.EAGER多次返回子级(Hibernate Criteria returns children multiple times with FetchType.EAGER)
    问题 我有一个Order类,其中包含OrderTransactions列表,并使用一对多Hibernate映射将其映射,如下所示: @OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL) public List<OrderTransaction> getOrderTransactions() { return orderTransactions; } 这些Order还具有一个字段orderStatus ,该字段用于根据以下条件进行过滤: public List<Order> getOrderForProduct(OrderFilter orderFilter) { Criteria criteria = getHibernateSession() .createCriteria(Order.class) .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow())); return criteria.list(); } 这可以正常工作,并且结果与预期的一样。 现在这是我的问题:为什么当我将访EAGER类型显式设置为EAGER , Order会在结果列表中多次出现? @OneToMany(targetEntity
  • SQL JOIN和不同类型的JOIN(SQL JOIN and different types of JOINs)
    问题 什么是SQL JOIN ,什么是不同类型? 回答1 W3schools的插图: 回答2 什么是SQL JOIN ? SQL JOIN是一种从两个或多个数据库表中检索数据的方法。 有什么不同的SQL JOIN ? 共有五个JOIN 。 他们是 : 1. JOIN or INNER JOIN 2. OUTER JOIN 2.1 LEFT OUTER JOIN or LEFT JOIN 2.2 RIGHT OUTER JOIN or RIGHT JOIN 2.3 FULL OUTER JOIN or FULL JOIN 3. NATURAL JOIN 4. CROSS JOIN 5. SELF JOIN 1. JOIN或INNER JOIN: 在这种JOIN ,我们获得了两个表中都与条件匹配的所有记录,并且两个表中不匹配的记录均未报告。 换句话说, INNER JOIN基于以下事实:仅应列出两个表中的匹配条目。 请注意,一个JOIN没有任何其他JOIN关键字(如INNER , OUTER , LEFT等)是一个INNER JOIN 。 换句话说, JOIN是INNER JOIN的语法糖(请参阅:JOIN和INNER JOIN之间的区别)。 2.外连接: OUTER JOIN检索 一个表中的匹配行与另一表中的所有行匹配,或者所有表中的所有行匹配(是否匹配)。 共有三种外连接: 2
  • 生成SQL中的所有组合(Generate all combinations in SQL)
    问题 我需要在给定的大小@n集合中生成大小@k所有组合。 有人可以查看下面的SQL并首先确定以下逻辑是否返回预期结果,然后确定是否有更好的方法? /*CREATE FUNCTION dbo.Factorial ( @x int ) RETURNS int AS BEGIN DECLARE @value int IF @x <= 1 SET @value = 1 ELSE SET @value = @x * dbo.Factorial( @x - 1 ) RETURN @value END GO*/ SET NOCOUNT ON; DECLARE @k int = 5, @n int; DECLARE @set table ( [value] varchar(24) ); DECLARE @com table ( [index] int ); INSERT @set VALUES ('1'),('2'),('3'),('4'),('5'),('6'); SELECT @n = COUNT(*) FROM @set; DECLARE @combinations int = dbo.Factorial(@n) / (dbo.Factorial(@k) * dbo.Factorial(@n - @k)); PRINT CAST(@combinations as varchar(max))
  • 【T-SQL基础】02.联接查询
    概述: 本系列【T-SQL基础】主要是针对T-SQL基础的总结。 本篇主要是对多表查询基础的总结。概述:本系列【T-SQL基础】主要是针对T-SQL基础的总结。【T-SQL基础】01.单表查询-几道sql查询题【T-SQL基础】02.联接查询【T-SQL基础】03.子查询【T-SQL基础】04.表表达式-上篇【T-SQL基础】04.表表达式-下篇【T-SQL基础】05.集合运算【T-SQL基础】06.透视、逆透视、分组集【T-SQL基础】07.数据修改【T-SQL基础】08.事务和并发【T-SQL基础】09.可编程对象 ----------------------------------------------------------【T-SQL进阶】01.好用的SQL TVP~~独家赠送[增-删-改-查]的例子 ----------------------------------------------------------【T-SQL性能调优】01.TempDB的使用和性能问题【T-SQL性能调优】02.Transaction Log的使用和性能问题【T-SQL性能调优】03.执行计划【T-SQL性能调优】04.死锁分析持续更新......欢迎关注我! 本篇主要是对多表查询基础的总结。查询语句的FROM字句在逻辑上是第一条要处理的字句
  • MyBatis—— SQL执行流程
    一、SQL执行流程 我们通常都会先调用 SqlSession 接口的 getMapper方法为我们的Mapper接口生成实现类。然后就可以通过Mapper进行数据库操作。 比如像下面这样: ArticleMapper articleMapper = session.getMapper(ArticleMapper.class); Article article = articleMapper.findOne(1); 如果大家对 MyBatis 较为了解,会知道 SqlSession 是通过 JDK 动态代理的方式为接口 生成代理对象的。在调用接口方法时,相关调用会被代理逻辑拦截。在代理逻辑中可根据方 法名及方法归属接口获取到当前方法对应的 SQL 以及其他一些信息,拿到这些信息即可进 行数据库操作。 1. 为Mapper接口创建代理对象 // -☆- DefaultSqlSession public <T> T getMapper(Class<T> type) { return configuration.<T>getMapper(type, this); } // -☆- Configuration public <T> T getMapper(Class<T> type, SqlSession sqlSession) { return mapperRegistry
  • ORDER BY和ROW_NUMBER()是否具有确定性?(Is ORDER BY and ROW_NUMBER() deterministic?)
    问题 几年来,我曾在几个数据库引擎中使用过SQL,但理论知识很少,因此对于某些人来说,我的问题可能非常“讨厌”。 但是现在这对我来说变得很重要,所以我不得不问。 想象一下具有非唯一列status表Urls。 对于这个问题,假设我们有大量的行,并且状态在每条记录中都具有相同的值。 想象一下我们执行了很多次查询: SELECT * FROM Urls ORDER BY status 我们是否每次都获得相同的行顺序? 如果我们添加一些新行,将会发生什么? 它会更改顺序还是将新记录添加到结果的末尾? 如果我们没有得到相同的订单-在什么条件下取决于该订单? ROW_NUMBER() OVER (ORDER BY status)将返回与上面查询相同的顺序,还是基于不同的排序机制? 回答1 非常简单。 如果您想要可以依赖的排序,则需要在ORDER BY子句中包括足够的列,以使所有这些列的组合对于每一行都是唯一的。 没有其他保证。 对于单个表,通常可以通过列出“感兴趣”的列进行排序,然后再包含主键列,从而获得所需的内容。 由于PK本身保证了唯一性,因此整个组合也可以保证唯一地定义顺序,例如,如果Urls表的主键为{Site, Page, Ordinal}则以下内容将为您提供可靠的结果: SELECT * FROM Urls ORDER BY status, Site, Page, Ordinal
  • 合并具有不同列数的两个表(Unioning two tables with different number of columns)
    问题 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 回答1 为具有较少列的表添加额外的列作为null Select Col1, Col2, Col3, Col4, Col5 from Table1 Union Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2 回答2 我来到这里,并按照上面的答案。 但是数据类型的顺序不匹配会导致错误。 以下来自另一个答案的描述将非常有用。 上面的结果是否与表中的列顺序相同? 因为oracle在列顺序方面很严格。 下面的示例产生一个错误: create table test1_1790 ( col_a varchar2(30), col_b number, col_c date); create table test2_1790 ( col_a varchar2(30), col_c date, col_b number); select * from test1_1790 union all select * from test2_1790; ORA-01790:表达式必须具有与相应表达式相同的数据类型 如您所见,错误的根本原因在于使用*作为列列表说明符所隐含的不匹配列顺序。 通过显式输入列列表
  • mysql详细教程大全
    SQL简介: SQL(Structured Query Language):是一种结构化查询语言,用于访问和处理关系型数据库系统的计算机标准语言。 关系型数据库系统(RDBMS:Relational Database Management System) 表 RDBMS中的数据存储在称为表的数据库对象中。这个表基本上是一个相关数据条目的集合,它由许多列和行组成。下图是adver_user(广告主表)的示例: 字段  每个表都被分解成更小的实体,称为字段。adver_user表中的字段由:广告主ID、广告主名称、广告主手机号和创建时间组成。  字段是表中的列,用于维护有关表中每条记录的特定信息。 列  列是表中的垂直实体,其中包含与表中特定字段关联的所有信息。 行数据  记录也称为数据行,即表中存在的每个单独的条目。例如,上面的adver_user表中有3条记录。 MySQL数据库服务器 一:下载 安装地址:https://dev.mysql.com/downloads/mysql 二:解压并启动MySQL服务器 将下载好的压缩包解压。并以管理员身份打开命令行,进入 MySQL 服务器安装的目录:D:\software\mysql-5.7.18-winx64\bin ,执行以下命令启动 MySQL。 ① mysqld -install ② net start mysql
  • PreparedStatement IN子句替代项?(PreparedStatement IN clause alternatives?)
    问题 将SQL IN子句与java.sql.PreparedStatement实例一起使用的最佳解决方法是什么,由于SQL注入攻击安全性问题,多个值不支持SQL IN子句:一个? 占位符表示一个值,而不是值列表。 考虑以下SQL语句: SELECT my_column FROM my_table where search_column IN (?) 使用preparedStatement.setString( 1, "'A', 'B', 'C'" ); 在使用原因的变通方法上,这实际上是不可行的尝试? 首先。 有哪些解决方法? 回答1 此处提供了对各种可用选项的分析,以及每种选项的优缺点。 建议的选项是: 在SELECT my_column FROM my_table WHERE search_column = ?准备SELECT my_column FROM my_table WHERE search_column = ? ,对每个值执行该操作,并在客户端对结果进行UNION。 只需要一个准备好的语句。 缓慢而痛苦。 SELECT my_column FROM my_table WHERE search_column IN (?,?,?)准备SELECT my_column FROM my_table WHERE search_column IN (?,?,?)并执行它。
  • 如何在SQL Server 2008 Management Studio中查看text或varchar(MAX)列的全部内容?(How do I view the full content of a text or varchar(MAX) column in SQL Server 2008 Management Studio?)
    问题 在此实时SQL Server 2008(内部版本10.0.1600)数据库中,有一个“ Events表,其中包含一个名为Details的text列。 (是的,我意识到这实际上应该是varchar(MAX)列,但是设置此数据库的人并没有那样做。) 该列包含大量异常日志和相关的JSON数据,我正尝试通过SQL Server Management Studio访问这些日志,但是每当我将结果从网格复制到文本编辑器时,它都会将其截断为43679个字符。 我已经阅读了Internet上的各个位置,可以在“ Tools > Options > Query Results > SQL Server > Results To Grid化为无限”中设置“ XML数据的最大字符检索”,然后执行如下查询: select Convert(xml, Details) from Events where EventID = 13920 (请注意,数据列根本不是XML。将列CONVERT为XML只是我在Googling上发现的一种变通方法,即其他人过去已经绕过SSMS从text或varchar(MAX)检索数据的限制。柱子。) 但是,在设置上面的选项,运行查询并单击结果中的链接之后,我仍然收到以下错误: 无法显示XML。 发生以下错误:发生了意外的文件结尾。 第5行,位置220160。
  • SQL联接三个表,联接优先(SQL joining three tables, join precedence)
    问题 我有三个表:R,S和P。 表R通过外键与S连接; S中至少应该有一个记录,所以我可以加入: SELECT * FROM R JOIN S ON (S.id = R.fks) 如果S中没有记录,那么我没有行,那很好。 然后,表S与P联接,其中记录为P可能存在,也可能不存在,并与S联接。 所以我做 SELECT * FROM R JOIN S ON (S.id = R.fks) LEFT JOIN P ON (P.id = S.fkp) 如果我想将第二个JOIN绑定到S而不是R,例如我可以使用括号,该怎么办: SELECT * FROM R JOIN (S ON (S.id = R.fks) JOIN P ON (P.id = S.fkp)) 还是这已经是R,S和P之间笛卡尔积的自然行为? 回答1 各种外部联接和普通联接都在相同的优先级类中,并且运算符在给定的查询嵌套级别从左到右生效。 您可以将连接表达式放在括号的右侧,以使其首先生效。 请记住,您必须四处移动ON子句,以便它们与联接保持在一起-括号中的联接将其ON子句与之一起放入括号中,因此,它现在在文字上位于另一个ON子句之前,该子句位于括号之后。 (PostgreSQL示例) 在SELECT * FROM a LEFT JOIN b ON (a.id = b.id) JOIN c ON (b.ref = c.id)