首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2 CTAS令牌错误

DB2 CTAS令牌错误
EN

Stack Overflow用户
提问于 2016-11-10 00:15:24
回答 1查看 311关注 0票数 0

我正在尝试使用DB2版本11.1.0中的CTAS语句,该语句创建一个新表并将其插入。查询如下:

代码语言:javascript
复制
      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中运行了上面的查询,它抛出了相同的错误。不太确定令牌问题在哪里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-10 09:28:54

不能使用公共表表达式。如果您查看CREATE TABLE的语法(下面的图表对您的具体问题作了简要说明):

代码语言:javascript
复制
>>-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的一部分。

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

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40518110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档