【问题标题】:Alternative option to UNION ALLUNION ALL 的替代选项
【发布时间】:2016-09-22 01:26:16
【问题描述】:

我有下面的 SQL:

SELECT '1.1' AS column_a, '1' as column_b, 4 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '1.2' AS column_a, '1' as column_b, 4001 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.1' AS column_a, '2' as column_b, 1 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.1' AS column_a, '2' as column_b, 2 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.1' AS column_a, '2' as column_b, 3 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 1001 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 1002 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 1003 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 1004 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 1005 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 1006 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 2001 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 2002 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 2003 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '2.2' AS column_a, '2' as column_b, 2004 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '3.1' AS column_a, '3' as column_b, 3001 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '3.1' AS column_a, '3' as column_b, 3002 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '3.2' AS column_a, '3' as column_b, 3003 AS column_c FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT '3.2' AS column_a, '3' as column_b, 3004 AS column_c FROM SYSIBM.SYSDUMMY1

SQL 的结果是固定的,所有的值都是一样的。

我正在使用 DB2。有没有更好的方法来做同样的事情,而不需要在 SQL 中重复那么多?

【问题讨论】:

  • 你可以使用VALUES,比如VALUES ('A', 1), ('B', 2), ('C', 2)
  • DB2 的平台和版本是什么?
  • 如何查看 DB2 的版本?
  • 当我执行 SELECT GETVARIABLE('SYSIBM.VERSION') FROM SYSIBM.SYSDUMMY1 时得到结果“DSN10015”
  • 他正在使用 db2 10 for zOS

标签: sql db2 union union-all


【解决方案1】:

正如 Lashane 所评论的,如果您的平台和 DB2 版本支持 VALUES,它可能就是答案。

这适用于 DB2 for i v7.1

with tbl (col1,col2) 
  as (VALUES ('A', 1), ('B', 2), ('C', 2))
select * from tbl                                            

【讨论】:

  • 我相信我的 DB2 版本不支持它。我收到错误:非法符号“TBL”。一些可能是合法的符号是:DSN_INLINE_OPT_HINT
  • @Daniel 你正在使用 db2 10 for zOS 你的版本支持它你只需要正确的语法。
  • @daniel -- 看我的回答。
  • 不,这里的 VALUES 用法不适用于 DB2/zOS。您必须使用 SYSIBM.SYSDUMMY1UNION 或使用下面的 XMLTABLE 技术。
【解决方案2】:

您可以使用PureXML 将嵌入的 XML 块解析为表格:

SELECT * 
FROM XMLTABLE (
'/set/row'
PASSING XMLPARSE(
'<set>
<row a="1.1" b="1" c="4"/>
<row a="1.2" b="1" c="4001"/>
<row a="2.1" b="2" c="1"/>
</set>')
COLUMNS
column_a CHAR(3) PATH '@a',
column_b CHAR(1) PATH '@b',
column_c INTEGER PATH '@c'
) AS X

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多