我不知道如何在Firebird中编写SQL语句,因此它应该添加新行,并且如果满足某些条件还可以更新其他列。
示例:
(在MySql中是这样的:)
insert into
table (col1, col2, col3) values ('a', 'b', 'c')
on duplicate key update col4=col3;
答案 0 :(得分:1)
您在Firebird中有两个选择
您可以使用UPDATE OR INSERT
:
UPDATE OR INSERT INTO table (col1, col2, col3)
VALUES ('a', 'b', 'c')
MATCHING (col1, col2)
MATCHING
子句是可选的。如果不使用它,它将使用主键:
UPDATE或INSERT插入新记录或更新一个或多个现有记录 记录。采取的措施取决于为 MATCHING子句中的列(如果没有,则在 首要的关键)。如果找到与这些值匹配的记录,则它们 已更新。如果没有,则插入新记录。
与您问题中的代码相反,这将不允许您自定义更新:它将使用与插入的值相同的值。
如果您想要更多控制权,请使用合并
MERGE
语句为您提供了更多控制权,但可能会更加冗长:
MERGE INTO table AS t
USING (select 'a' as new1, 'b' as new2, 'c' as new3 from rdb$database) as s
ON t.col1 = s.new1 and t.col2 = s.new2
WHEN MATCHED THEN
UPDATE SET t.col4 = t.col3
WHEN NOT MATCHED THEN
INSERT (col1, col2, col3) values (s.new1, s.new2, s.new3)
但是与UPDATE OR INSERT
相反,MERGE
不能使用主键。您需要在ON
子句中自行指定重复规则。