【问题标题】:SAP HANA: Converting SQL Insert Statement into a delete statementSAP HANA:将 SQL 插入语句转换为删除语句
【发布时间】:2022-06-11 07:56:30
【问题描述】:

我有一个 SQL 语句,它从 3 个不同的表中插入一个表数据并使用条件连接它们,我想用一个 DELETE 语句恢复插入(同时将日期作为删除语句中的输入值)。

INSERT INTO ORD FROM DATASOURCE_ORD INNER JOIN (
  SELECT DISTINCT Field_1, Field_2 FROM INVOICE INNER JOIN (
    SELECT DISTINCT Field_3 FROM FI WHERE DATE >= Input_Value) ON 
      (FI.Field_3 = INVOICE.FIELD_2))A 
      ON (A.Field_4 = DATASOURCE_ORD.Field_5 AND INVOICE.Field_1 = 
           DATASOURCE_ORD.Field_6)

当我尝试使用WHERE EXISTS 并保留第二个INNER JOINA 时,它会抛出incorrect syntax near A

关于如何将 insert statement 转换为 delete statement

的任何想法

非常感谢

【问题讨论】:

  • 为什么不粘贴整个删除 SQL 语句?

标签: sql hana


【解决方案1】:

删除意味着数据已经在ORD表中,所以不需要在DELETE Script中编写内连接。只需使用 ORD 表中的字段名称直接从 ORD 表中删除,这样您就不必在 Where 子句中写 A. 或 B.。

【讨论】:

    【解决方案2】:

    SQL 提供了一种机制来“...恢复插入...” - 它被称为ROLLBACK。当然,这只有在插入数据的事务还没有COMMITted 的情况下才有效。

    如果您想精确删除由INSERT 语句插入的元组,那么您需要知道这些元组的主键。 当您拥有这些密钥时,这就是DELETE FROM ORD WHERE <primary key> in (<pk1>, <pk2>,...) 的问题。

    但这似乎不是 OP 所要求的 - 至少不完全是。

    这里要看到的重要一点是,可以将用于INSERT 的等效过滤条件应用于DELETE 操作。然而,即使过滤器是等效的,它仍然可能影响 其他 元组而不是之前插入的元组。

    这是因为所涉及的表可以(并且可能会)包含来自其他事务的数据。这些其他记录可以很容易地包含在INSERT 语句的过滤条件中。
    此外,“目标”表似乎不包含已在过滤条件中使用的数据。 实际上,这在过滤条件和目标表中的条目之间创建了不可逆的映射。

    当然,人们仍然可以继续(并弄乱数据)并从目标表中删除匹配(现在)任何“来自过滤条件”的记录:

    DELETE FROM ORD 
    WHERE 
    EXISTS
    (SELECT * FROM DATASOURCE_ORD DS_ORD
     INNER JOIN (
      SELECT DISTINCT Field_1, Field_2 FROM INVOICE 
      INNER JOIN (
        SELECT DISTINCT Field_3 FROM FI WHERE DATE >= Input_Value) 
       ON 
          (FI.Field_3 = INVOICE.FIELD_2))A 
          ON (A.Field_4 = DATASOURCE_ORD.Field_5 AND INVOICE.Field_1 = 
               DATASOURCE_ORD.Field_6)
    WHERE
     (ORD.<col1> = DS_ORD.<col1>, 
      ORD.<col2> = DS_ORD.<col2>, 
       ..)
    )
    

    注意:虽然这在技术上应该可行,但它会弄乱数据,因为它不会这样做,但 OP 可能想要实现的目标是:撤消目标表上的 INSERT 操作。 p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 2012-03-19
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      相关资源
      最近更新 更多