【问题标题】:How to use WITH CLAUSE ...INSERT query in SAP HANA?如何在 SAP HANA 中使用 WITH CLAUSE ...INSERT 查询?
【发布时间】:2017-07-18 04:16:53
【问题描述】:

这里我使用了带 AS 子句。如果我使用 SELECT 查询,它工作正常,但如果我使用插入查询。它给出了语法错误。 我们可以在 SAP HANA 中使用 WITH ....INSERT 吗?

代码:

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;

【问题讨论】:

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


    【解决方案1】:

    根据我对 HANA 的了解,INSERT 子句目前不支持 CTE(~ 基于 WITH 的查询)。这意味着您应该尽可能直接使用子查询。

    IMO,唯一不可能在没有 CTE 的情况下创建的场景是递归查询(HANA 根本不支持)。由于您的查询不是递归的,您可以重写并简化如下:

    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
    

    【讨论】:

    • SAP HANA 支持 CTE,但仅在 SELECT 语句中。
    【解决方案2】:

    除了 Serban 的正确答案之外,缺少 CTE 功能的一般解决方法是创建视图。 在您的情况下,可能是:

    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;
    

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多