SAP HANA Sql是否存在

时间:2017-03-30 07:36:15

标签: sap hana

我想找"如果存在",但是sap hana sql不理解"如果存在"。我是否创建了sql-command错误。

如果' Y'记录存在于ZZZ_Exercise_3的表格中,否则' N'从ZZZ_Exercise_3表中不存在记录。如果旧的记录为'N'然后这个记录删除应该。

 CREATE COLUMN TABLE ers.ZZZ_EXERCISE_5(
    ID INT NOT NULL PRIMARY KEY generated by default as IDENTITY,
    Orig_ID INT,
    COMPANY nvarchar(251),
    VALID char(1)
);

COMMIT;

IF EXISTS(
    INSERT INTO ZZZ_EXERCISE_5(Orig_ID, COMPANY, VALID)
    SELECT ID, COMPANY, 'Y' FROM ZZZ_EXERCISE_3
)
ELSE(
    INSERT INTO ZZZ_EXERCISE_5(Orig_ID, COMPANY, VALID)
    SELECT ID, COMPANY, 'N' FROM ZZZ_EXERCISE_3
)

COMMIT;

UPDATE ZZZ_EXERCISE_3
SET COMPANY = (SELECT COMPANY FROM ERS.ZZZ_EXERCISE_5)
WHERE NOT EXISTS (SELECT COMPANY FROM ZZZ_EXERCISE_5 WHERE ZZZ_EXERCISE_5.VALID = 'N')

COMMIT;

DELETE FROM ZZZ_EXERCISE_3
WHERE ERS.ZZZ_EXERCISE_5.VALID = 'N'

SELECT * FROM ZZZ_EXERCISE_3
WHERE NOT EXISTS (SELECT COMPANY FROM ZZZ_EXERCISE_5 WHERE ZZZ_EXERCISE_5.ID = ZZZ_EXERCISE_3.ID)

1 个答案:

答案 0 :(得分:0)

不确定哪种SQL方言会接受您的语句,但IF-THEN-ELSE通常是SAP HANA中PL / SQL,T-SQL或SQLScript等过程扩展的一部分。

如果您详细解释了您想要实现的目标(而不仅仅是发布一些不起作用的非标准语法),那么可以选择在SAP HANA中执行此操作。

如果' Y'记录存在于ZZZ_Exercise_3的表格中,否则' N'从ZZZ_Exercise_3表中不存在记录。如果旧的记录为'N'然后这个记录删除应该。

根据修改后的描述,我的理解是你想要

  1. 对于ZZZ_EXERCISE_5中的每条记录: 检查ZZZ_EXERCISE_3中是否存在,如果是,请将VALID中的ZZZ_EXERCISE_5字段设置为Y
    如果记录存在于ZZZ_EXERCISE_3但不在ZZZ_EXERCISE_5中,请将该记录插入ZZZ_EXERCISE_5
    如果记录不在ZZZ_EXERCISE_3但在ZZZ_EXERCISE_5中,请将VALID设置为N
  2. 之后,您要删除ZZZ_EXERCISE_3ZZZ_EXERCISE_5的匹配记录VALID = N
  3. 的所有记录

    对于第1步,您需要查看

    第2步更容易,所以让我们从那开始:

       DELETE FROM ZZZ_EXERCISE_3 
       WHERE ID IN (SELECT DISTINCT ID 
                    FROM ZZZ_EXERCISE_5 
                    WHERE VALID ='N');
    

    步骤1有点复杂,因为它应结合UPDATE和INSERTS。为此,SAP HANA提供MERGE命令(也称为REPLACE)。 MERGE|REPLACE DOCU

    使用SAP HANA 2,还有一个新命令MERGE INTO更接近其他DBMS中常用的MERGE命令。 MERGE INTO DOCU