简体   繁体   English

如何在SAP HANA中使用WITH CLAUSE ... INSERT查询?

[英]How to use WITH CLAUSE …INSERT query in SAP HANA?

Here I used With AS Clause.if i use SELECT query it is working fine but if i use insert query . 在这里我用AS Clause.if我使用SELECT查询它工作正常,但如果我使用插入查询。 it gives syntax error. 它给出了语法错误。 Can we use WITH ....INSERT in SAP HANA? 我们可以在SAP HANA中使用WITH .... INSERT吗?

Code: 码:

WITH t1 as
(
  Select 
  col1,
 col2,
 col3
  from table1),

t2 as
(
select 
a.col4,
a.col5,
a.col1,
b.col3
from table2 a 
left outer join t1
on a.col1 = b. col1)
insert into table3
select
c.col4,
c.col5,
c.col3
from t2;

In addition to Serban's correct answer, a general workaround for lack of CTE functionality is to create views instead. 除了Serban的正确答案之外,缺乏CTE功能的一般解决方法是创建视图。 In your case that could be: 在你的情况下,可能是:

create view t1 as
(select 
        col1,
        col2,
        col3
 from 
        table1);

create view t2 as
(select 
      a.col4,
      a.col5,
      a.col1,
      b.col3
 from 
      table2 a 
 left outer join t1
              on a.col1 = b. col1);

insert into table3
select
      c.col4,
      c.col5,
      c.col3
from t2;

Based on my knowledge on HANA, CTEs (~ WITH-based queries) are currently not supported in INSERT clauses. 根据我对HANA的了解,INSERT子句目前不支持CTE(基于WITH的查询)。 This means that you should directly use sub-queries instead where possible. 这意味着您应该尽可能直接使用子查询。

IMO, the only scenario that is impossible to create without CTEs are recursive queries (which are not at all supported in HANA). IMO,没有CTE是唯一不可能创建的场景是递归查询(在HANA中完全不支持)。 As your query is not recursive, you can re-write and simplify it as follows: 由于您的查询不是递归的,您可以按如下方式重新编写和简化:

INSERT INTO TABLE3
SELECT T2.COL4, T2.COL5, T1.COL3 
    FROM TABLE1 AS T1 
    LEFT OUTER JOIN TABLE2 AS T2
    ON T1.COL1 = T2.COL1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM