我想找"如果存在",但是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)
答案 0 :(得分:0)
不确定哪种SQL方言会接受您的语句,但IF-THEN-ELSE通常是SAP HANA中PL / SQL,T-SQL或SQLScript等过程扩展的一部分。
如果您详细解释了您想要实现的目标(而不仅仅是发布一些不起作用的非标准语法),那么可以选择在SAP HANA中执行此操作。
如果' Y'记录存在于ZZZ_Exercise_3的表格中,否则' N'从ZZZ_Exercise_3表中不存在记录。如果旧的记录为'N'然后这个记录删除应该。
根据修改后的描述,我的理解是你想要
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
。ZZZ_EXERCISE_3
中ZZZ_EXERCISE_5
的匹配记录VALID
= N
对于第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