我想查找“如果存在”,但HANA SQL不理解“如果存在”。是否是我创建的SQL命令错误。
如果记录的“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)
不确定哪种 SQL 方言会接受您的语句,但 IF-THEN-ELSE 通常是 SAP HANA 中的 PL/SQL、T-SQL 或 SQLScript 等过程扩展的一部分。
如果您详细解释您想要实现的目标(而不是仅仅发布一些不起作用的非标准语法),可能有一些选项可以在 SAP HANA 中实现这一目标。
如果 ZZZ_Exercise_3 的表中存在记录“Y”,则 ZZZ_Exercise_3 的表中不存在记录“N”。如果旧记录为“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 有点复杂,因为它将结合更新和插入。为此,SAP HANA 提供了
MERGE
命令(也称为 REPLACE
)。 合并|替换文档
在 SAP HANA 2 中,还有一个新命令
MERGE INTO
,它更接近其他 DBMS 中常用的 MERGE
命令。 合并到文档中。