从两个 DB2 表 UNION ALL 中提取数据

Posted

技术标签:

【中文标题】从两个 DB2 表 UNION ALL 中提取数据【英文标题】:Pull data from two DB2 tables, UNION ALL 【发布时间】:2015-03-03 18:58:07 【问题描述】:

我有两个表。在输出结果中,我想合并两者的数据。所以假设我必须使用 UNION 语句。我在结果集中需要什么:

    仅来自 TABLE1 的第 1 行和第 2 行。 TABLE2 中的所有行,其中 TABLE2/COL4 = TABLE1/COL1 在 #1 中被选中,(这些是 TABLE2 中的 1 和 3) 在输出结果中,将 COL2 中的数据替换为 TABLE2 行,并使用 TABLE1 的 COL2 中的数据
TABLE1------------------------------------------
COL1  COL2    COL3
1     aaa1    eee1
2     bbb1    fff1
3     ccc1    ggg1
4     ddd1    hhh1

TABLE2------------------------------------------
COL1  COL2    COL3    COL4
1     aaa2    eee2    1
2     bbb2    fff2    4
3     ccc2    ggg2    1
4     ddd2    hhh2    3

RESULT I NEED-----------------------------------
COL1  COL2    COL3
1     aaa1    eee1
2     bbb1    fff1
1     aaa1    eee2
3     aaa1    ggg2

我需要这样的东西:

SELECT#1 COL1, COL2, COL3 FROM TABLE1 WHERE COL1 IN ('1','2')
UNION ALL
SELECT#2 COL1, COL2 <AS SELECT#1.COL2>, COL3 FROM TABLE2 WHERE <COL4 IN SELECT#1.COL1>

【问题讨论】:

第二个 SELECT 需要与 TABLE1 连接。 好的,但是#3 呢? (在输出结果替换数据......)。我需要一列 COL2 中两个表中的数据 【参考方案1】:
select col1, col2, col3 from table1
WHERE COL1 IN (1,2)
union
select t2.col1,
       coalesce((select col2 from table1
                 WHERE COL1 IN (1,2)
                   AND COL1 = t2.col4),
                t2.col2),
       t2.col3
from table2 t2 join table1 t1 on t1.col1 = t2.col1 and col4 in
  (select col1 from table1 WHERE COL1 IN (1,2))

给我:

SQL>select * from table1
SQL&WHERE COL1 IN (1,2)
SQL&union
SQL&select t2.col1,
SQL&       coalesce((select col2 from table1
SQL&                 WHERE COL1 IN (1,2)
SQL&                   AND COL1 = t2.col4),
SQL&                t2.col2),
SQL&       t2.col3
SQL&from table2 t2 join table1 t1 on t1.col1 = t2.col1 and col4 in
SQL&  (select col1 from table1 WHERE COL1 IN (1,2))
SQL&;

       col1 col2   col3
       ==== ====   ====
          1 aaa1   eee1
          2 bbb1   fff1
          1 aaa1   eee2
          3 aaa1   ggg2

4 rows found

【讨论】:

只是另一个问题.. 如果我需要在多个列中进行替换,我应该重复“coalesce((select col2 from table1 WHERE COL1 IN (1,2) AND COL1 = t2.col4), t2.col2),”每个?我不想多次调用同一个 SELECT 您可以使用派生表。

以上是关于从两个 DB2 表 UNION ALL 中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

简单的 MS Access SQL UNION ALL;如何包含自动注释列值?

从 DB2 数据库的两个表中提取数据并加载到临时表中

union all是啥意思?

数据库中union 与union all 的区别

unionall会锁表吗

union和union all 的写法