同时创建和插入表的SQL查询错误

Posted

技术标签:

【中文标题】同时创建和插入表的SQL查询错误【英文标题】:SQL query error of creating and inserting a table at the same time 【发布时间】:2014-05-04 16:24:04 【问题描述】:

我的 SQL 查询需要通过子查询进行一些计算。

INSERT INTO db.my_new_table 
SELECT db.table1.id  ,  db.table1.value  *  db.table2.factor  AS myValue 
FROM
 (
      SELECT a.id, SUM(a.value) AS factor
      FROM  db.table0  a
      GROUP by a.id
 ) AS table1
 JOIN  db.table2   AS  b
 ON db.table1.id  =  b.id;

但是,我得到了错误:

  ERROR [HY000] ERROR:  Cross Database Access not supported for this type of command

我不想在数据库上运行查询之前先创建一个新表。 我可以访问数据库。 我想同时创建和插入。

谢谢!

【问题讨论】:

这是否解释了您遇到的错误和解决方法? pic.dhe.ibm.com/infocenter/ntz/v7r0m3/… @Steve Wellens,同样的错误,但是,我正在尝试将表插入到我登录的当前数据库中。谢谢! 我没有使用 Netezza 的经验,但我想知道使用派生表是否值得玩 - 如果您可以安排事情到使用派生表获得成功的程度,例如:SELECT derived.* FROM (SELECT ... your query ...) as derived then您可能有机会在前面添加INSERT 【参考方案1】:

问题出在您的列引用中。您不需要使用模式为列添加前缀,只需使用别名即可。此外,您的子查询没有“值”字段;我想你可能已经转置了字段。试试这个:

INSERT INTO db.my_new_table 
SELECT a.id, 
    a.factor * b.value AS myValue 
FROM (
        SELECT id, SUM(value) AS factor
        FROM  db.table0
        GROUP by id
     ) AS a
JOIN db.table2 AS b
     ON a.id = b.id;

【讨论】:

【参考方案2】:

如果您的问题确实是您没有表并希望将其创建为插入语句的一部分,只需将您的插入更改为 CREATE TABLE db.my_new_table AS SELECT ....

在此处查看文档: http://pic.dhe.ibm.com/infocenter/ntz/v7r0m3/index.jsp?topic=%2Fcom.ibm.nz.dbu.doc%2Fr_dbuser_create_table_as.html

【讨论】:

以上是关于同时创建和插入表的SQL查询错误的主要内容,如果未能解决你的问题,请参考以下文章

sql将查询结果插入到表的每一列中

sql语句 怎么从一张表中查询数据插入到另一张表中

想用sql语句实现:查询出在最近10分钟(或一段时间区间内)插入数据库某个表的所有数据。

SQL语句中两个表的连接

使用带有 Azure 链接表的 Access 插入 SQL 失败

sql多表查询语句解释一下啥意思,还有怎么样插入一行