我正在尝试使用DB2版本11.1.0中的CTAS语句,该语句创建一个新表并将其插入。查询如下:
CREATE TABLE MY_SCRATCH.LC$U7OB81478732948714_zero_to_3 AS (
WITH two AS (SELECT id AS the_num FROM users WHERE id = 2)
, one_two AS (
SELECT id AS the_num FROM users WHERE id = 1
UNION ALL
SELECT * FROM two tmp
)
, zero_one_two AS (
SELECT id-7 AS the_num FROM users where id = 7
UNION ALL
SELECT * FROM one_two tmp
)
SELECT * FROM zero_one_two tmp
UNION ALL
SELECT id AS the_num FROM users WHERE id = 3
) WITH DATA但是,我收到以下错误:
“my_error”:“derived_table错误:derived_table zero_to_3创建失败:创建表中的my_error作为SELECT: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL错误: SQLCODE=-104,SQLSTATE=42601,SQLERRMC=AS;RO_TO_3\”(\n nWITH 2;JOIN,DRIVER=4.16.53)
根据DB2文档,错误是由于以下原因造成的:
在SQL语句中出现符号"token“时,检测到语法错误。如果语句的前一部分完全正确,则可能合法的符号列表显示可能在此点上正确的其他符号。
因此,我在RazorSQL中运行了上面的查询,它抛出了相同的错误。不太确定令牌问题在哪里
发布于 2016-11-10 09:28:54
不能使用公共表表达式。如果您查看CREATE TABLE的语法(下面的图表对您的具体问题作了简要说明):
>>-CREATE TABLE--table-name------------------------------------->
>--+-----------------------+--AS--(--fullselect--)-------------->
| .-,-----------. |
| V | |
'-(----column-name-+--)-'
>--+-WITH NO DATA-+---------------------------------------------|
'-WITH DATA----' http://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000877.html是完整选择查询的一部分,但它不包括公共表表达式。公共表表达式是http://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000879.html的一部分。
可以使用嵌套表表达式而不是公共表表达式重写查询,但是使用示例查询很难说明这一点,因为您甚至根本不需要公共表表达式。您的查询可以以一种非常简单的方式编写,如下所示:
CREATE TABLE MY_SCRATCH.LC$U7OB81478732948714_zero_to_3 AS (
select id as the_num from users where id = 2
union all
select id as the_num from users where id = 1
union all
select id-7 as the_num from users where id = 7
union all
select id as the_num from users where id = 3
)
WITH DATA;https://stackoverflow.com/questions/40518110
复制相似问题