【问题标题】:Merge two SELECT statements which have one or more additional columns合并具有一个或多个附加列的两个 SELECT 语句
【发布时间】:2015-07-24 00:19:54
【问题描述】:

我有两个如下所示的选择语句

SELECT * FROM TABLE1 

给我

COLUMNA, COLUMNB, COLUMNC

SELECT * FROM TABLE2

给我

COLUMNA, COLUMNB, COLUMND

COLUMNA、COLUMNB 在这两个 SELECT 中是相同的(行数和单元格值相同)

如何合并这两个 SELECT,这样我就可以在一个查询中拥有四列并且没有额外的行

COLUMNA, COLUMNB, COLUMNC, COLUMND

根据 cmets 更新我的问题。假设我有两个如下表

TABLE1                     TABLE2
COLUMNA COLUMNB COLUMNC    COLUMNA COLUMNB COLUMND
value1  value2  value3     value1  value2  value9
value4  null    value5     value4  null    value10
null    value6  value7     null    value6  value11
null    null    value8     null    null    value12

结果应该是

COLUMNA COLUMNB COLUMNC    COLUMND
value1  value2  value3     value9
value4  null    value5     value10
null    value6  value7     value11
null    null    value8     value12

【问题讨论】:

  • “合并”是什么意思?请使用一些示例数据和所需结果编辑您的问题。
  • 将这两个 SELECT 查询合并为一个查询
  • @yalkris 不清楚你所说的合并到底是什么意思。这两个记录集具有不同的列名。更严格地定义合并操作。

标签: sql select merge


【解决方案1】:

我猜你正在寻找这样的东西。

SELECT COLUMNA, COLUMNB, COLUMNC, NULL as COLUMND FROM TABLE1 

UNION 

SELECT COLUMNA, COLUMNB, NULL as COLUMNC, COLUMND FROM TABLE2

或者也许:

SELECT COLUMNA, COLUMNB, COLUMNC FROM TABLE1 

UNION 

SELECT COLUMNA, COLUMNB, COLUMND as COLUMNC FROM TABLE2 

【讨论】:

  • 这个查询给出了重复的行,其中 columnC 和 columnD 具有空值
【解决方案2】:

这将为您提供 3 列,第三列是不同值的列:

SELECT 
 COLUMNA, COLUMNB, COLUMNC AS [Column3]
FROM TABLE1 
UNION ALL
SELECT 
 COLUMNA, COLUMNB, COLUMND AS [Column3]
FROM TABLE2

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT A.COLUMNA, A.COLUMNB, A.COLUMNC, B.COLUMND 
    FROM TABLE1 A
    JOIN TABLE2 B ON A.COLUMNA = B.COLUMNA AND A.COLUMNB = B.COLUMNB
    

    如果在 columnA 和 columnB 中有一行不相同或不存在,并且您希望它在结果中使用:

    SELECT A.COLUMNA, A.COLUMNB, A.COLUMNC, B.COLUMND 
    FROM TABLE1 A
    LEFT JOIN TABLE2 B ON A.COLUMNA = B.COLUMNA AND A.COLUMNB = B.COLUMNB
    

    【讨论】:

      【解决方案4】:

      由于您指出ColumnAColumnB 的行和值相同,如果值相同,您可以将两个表JOIN 放在一起

      SELECT a.ColumnA
            ,a.ColumnB
            ,a.ColumnC
            ,b.ColumnD
      FROM Table1 a
      JOIN Table2 b
        ON a.ColumnA = b.ColumnA
        AND a.ColumnB = b.ColumnB
      

      如果您在两个表之间存在差异,即一个中有一些记录而另一个没有,您可以使用FULL JOIN 并更改SELECT

      SELECT COALESCE(a.ColumnA,b.ColumnA) AS ColumnA
            ,COALESCE(a.ColumnB,b.ColumnB) AS ColumnB
            ,a.ColumnC
            ,b.ColumnD
      FROM Table1 a
      FULL JOIN Table2 b
        ON a.ColumnA = b.ColumnA
        AND a.ColumnB = b.ColumnB
      

      【讨论】:

      • 如果单元格值很少有 null ,这将不起作用
      • @yalkris 底部查询将返回 NULL 值记录,但如果两个表中都存在则将位于单独的行上,从问题中不清楚您到底要做什么。
      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多