为什么我的 SQL MERGE 在 EXECUTE BLOCK 中不起作用?
Why my SQL MERGE inside an EXECUTE BLOCK with doesn't work?
表 1 包含一个 ID 列表。目标是检查 table3 中(对于 table1 中的每个 id)是否有包含此 id 的行。如果没有,我想插入一个包含值列表的新行。
我试过用这个块来做:
SET TERM #;
EXECUTE block AS
DECLARE idA bigint;
DECLARE idB bigint;
BEGIN
FOR SELECT id_x, id_y FROM table1 inner join table2 on table1.column = 'random' into :idA, :idB
do
MERGE INTO table3 FCA USING (SELECT '1' AS TEST FROM RDB$DATABASE) R ON (table3.column1= :idA)
WHEN NOT MATCHED THEN INSERT (column1, column2, column3) VALUES (null, :idB, :idA)
END#
SET TERM;#
但是,它不起作用(MERGE 语句)。实际上,我已经尝试使用 INSERT INTO。它有效,但如您所见,这不是我想要的。
那么,为什么合并不起作用?
MERGE 以 RIGHT JOIN 的形式工作。在您的情况下,始终满足连接条件,因此永远不会执行 NOT MATCHED 操作。
表 1 包含一个 ID 列表。目标是检查 table3 中(对于 table1 中的每个 id)是否有包含此 id 的行。如果没有,我想插入一个包含值列表的新行。
我试过用这个块来做:
SET TERM #;
EXECUTE block AS
DECLARE idA bigint;
DECLARE idB bigint;
BEGIN
FOR SELECT id_x, id_y FROM table1 inner join table2 on table1.column = 'random' into :idA, :idB
do
MERGE INTO table3 FCA USING (SELECT '1' AS TEST FROM RDB$DATABASE) R ON (table3.column1= :idA)
WHEN NOT MATCHED THEN INSERT (column1, column2, column3) VALUES (null, :idB, :idA)
END#
SET TERM;#
但是,它不起作用(MERGE 语句)。实际上,我已经尝试使用 INSERT INTO。它有效,但如您所见,这不是我想要的。
那么,为什么合并不起作用?
MERGE 以 RIGHT JOIN 的形式工作。在您的情况下,始终满足连接条件,因此永远不会执行 NOT MATCHED 操作。