【问题标题】:Vertica - Work around for using WITH with INSERT statementVertica - 解决将 WITH 与 INSERT 语句一起使用的问题
【发布时间】:2017-05-14 06:33:51
【问题描述】:

我有一个类似

的 SQL 查询
with subtable as (
................
)
select * 
from subtable

我想将 select 语句中的记录插入到表中。寻找类似的东西:

with subtable as (......)
insert into newtable 
select * 
from subtable

但是,在 Vertica 中,INSERT 不能与 WITH (CTE) 语句一起使用。

有什么解决办法吗?

感谢您的帮助

【问题讨论】:

  • 您可以改用视图。
  • 既然可以insert into newtable ( ... <select/union here> ... ),为什么还要使用with 子句?
  • 标记正确答案! @woot - 已交付!

标签: sql sql-insert common-table-expression vertica


【解决方案1】:

with 是选择的一部分。

insert into newtable 
with subtable as (......) 
select * 
from subtable

【讨论】:

  • 很想知道为什么我被否决了。这对 Vertica 来说是正确的。
【解决方案2】:

我只能同意woot所说的。 在 Vertica 中,SELECT 语句支持公用表表达式,而不支持任何 DML 语句。这也是 ANSI 标准的意图。 如果您的意思是将数据位放在脚本的顶部,而不是之前的 INSERT INTO foo 行“隐藏”,那么您可以(但在 WITH 子句之前仍然有一行):

CREATE LOCAL TEMPORARY TABLE foo(id,ts,name,exp) ON COMMIT PRESERVE ROWS AS 
          SELECT 1,'2016-12-13 10:11'::TIMESTAMP,'Moshe',1
UNION ALL SELECT 2,'2016-12-13 12:12'::TIMESTAMP,'Karl' ,2
UNION ALL SELECT 3,'2016-12-13 13:12'::TIMESTAMP,'Karl' ,2
UNION ALL SELECT 4,'2016-12-13 14:09'::TIMESTAMP,'Moshe',2
UNION ALL SELECT 5,'2016-12-13 18:07'::TIMESTAMP,'Karl' ,2
KSAFE 0;

理智的马可

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多