DB2CTAS令牌错误

DB2CTAS令牌错误,db2,dashdb,Db2,Dashdb,我试图在DB2Version11.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 WHER

我试图在DB2Version11.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
但是,我收到以下错误:

“我的_错误”:“SQL错误:派生的_表零到_3创建失败:创建表为SELECT:com.ibm.db2.jcc.am.SqlSyntaxErrorException:db2 SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=as;RO_到_3\”(\n带两个;JOIN,DRIVER=4.16.53)

根据,错误的原因如下:

      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
在SQL语句中出现符号“token”的位置检测到语法错误。可能合法的符号列表显示了一些在该点上可能正确的替代符号,如果语句的前一部分完全正确


因此,我在RazorSQL中运行了上面的查询,它抛出了相同的错误。不太确定令牌问题在哪里,您不能使用公共表表达式。如果您查看
创建表的语法(下图是针对您的特定问题的摘要):

A是完整选择查询的一部分,但不包括公用表表达式。公用表表达式是完整选择查询的一部分

也许可以使用嵌套表表达式而不是常用表表达式重写查询,但对于示例查询,很难说明这一点,因为您根本不需要常用表表达式。您的查询可以用一种简单得多的方式编写,如下所示:

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;

您不能使用公共表表达式。如果查看
创建表的语法(下图为您的特定问题的节略):

A是完整选择查询的一部分,但不包括公用表表达式。公用表表达式是完整选择查询的一部分

也许可以使用嵌套表表达式而不是常用表表达式重写查询,但对于示例查询,很难说明这一点,因为您根本不需要常用表表达式。您的查询可以用一种简单得多的方式编写,如下所示:

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;

包括列名在内的预期表结构是什么?包括列名在内的预期表结构是什么?我没有使用您的代码,因为我在系统中找到了一个允许我关闭CTA中CTE支持的标志,该标志修复了问题。我没有使用您的代码,因为我在系统中找到了一个允许我这样做的标志关闭CTA中的CTE支持以修复问题