同时创建和插入表的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语句实现:查询出在最近10分钟(或一段时间区间内)插入数据库某个表的所有数据。