Sql 如何在没有MERGE语句的情况下执行Update-else-Insert操作win-INFORMIX
假设我有两个表——Source和Target。我试图从源加载目标表,只有当记录不在目标表中时,才应插入该记录,否则应更新该记录。比较时应考虑所有列。Informix中除了Merge语句之外还有其他可用选项。现在,Informix 10.00(或11.50.xC6之前的任何版本)中没有Merge语句 没有一个简单的解决方法 在大纲中,最接近的近似值为:Sql 如何在没有MERGE语句的情况下执行Update-else-Insert操作win-INFORMIX,sql,informix,insert-update,merge-statement,Sql,Informix,Insert Update,Merge Statement,假设我有两个表——Source和Target。我试图从源加载目标表,只有当记录不在目标表中时,才应插入该记录,否则应更新该记录。比较时应考虑所有列。Informix中除了Merge语句之外还有其他可用选项。现在,Informix 10.00(或11.50.xC6之前的任何版本)中没有Merge语句 没有一个简单的解决方法 在大纲中,最接近的近似值为: 识别源表和目标表中的主键列-我将假设它们是名称为src_primary_key和tgt_primary_key的单列键。如果它们是多列键,生活会更
src_primary_key
和tgt_primary_key
的单列键。如果它们是多列键,生活会更加复杂,但也不是无法克服的
INSERT INTO Target
SELECT *
FROM Source
WHERE src_primary_key NOT IN (SELECT tgt_primary_key FROM Target)
SELECT src_primary_key
FROM Source
WHERE src_primary_key NOT IN (SELECT tgt_primary_key FROM Target)
INTO TEMP Missing_Keys
INSERT INTO Target
SELECT *
FROM Source
WHERE src_primary_key IN (SELECT src_primary_key FROM Missing_Keys)
SELECT src_primary_key
FROM Source
WHERE src_primary_key IN (SELECT tgt_primary_key FROM Target)
INTO TEMP Present_Keys;
DELETE FROM Target
WHERE tgt_primary_key IN (SELECT src_primary_key FROM Present_Keys)
INSERT INTO Target
SELECT * FROM Source
WHERE src_primary_key IN (SELECT src_primary_key FROM Present_Keys)
BEGIN WORK;
DELETE FROM Target
WHERE tgt_primary_key IN (SELECT src_primary_key FROM Source);
INSERT INTO Target SELECT * FROM Source;
COMMIT WORK;
现在,Informix 10.00(或11.50.xC6之前的任何版本)中没有MERGE语句
没有一个简单的解决方法
在大纲中,最接近的近似值为:
src_primary_key
和tgt_primary_key
的单列键。如果它们是多列键,生活会更加复杂,但也不是无法克服的
INSERT INTO Target
SELECT *
FROM Source
WHERE src_primary_key NOT IN (SELECT tgt_primary_key FROM Target)
SELECT src_primary_key
FROM Source
WHERE src_primary_key NOT IN (SELECT tgt_primary_key FROM Target)
INTO TEMP Missing_Keys
INSERT INTO Target
SELECT *
FROM Source
WHERE src_primary_key IN (SELECT src_primary_key FROM Missing_Keys)
SELECT src_primary_key
FROM Source
WHERE src_primary_key IN (SELECT tgt_primary_key FROM Target)
INTO TEMP Present_Keys;
DELETE FROM Target
WHERE tgt_primary_key IN (SELECT src_primary_key FROM Present_Keys)
INSERT INTO Target
SELECT * FROM Source
WHERE src_primary_key IN (SELECT src_primary_key FROM Present_Keys)
BEGIN WORK;
DELETE FROM Target
WHERE tgt_primary_key IN (SELECT src_primary_key FROM Source);
INSERT INTO Target SELECT * FROM Source;
COMMIT WORK;
如果您仍在使用Informix的任何版本10或11,您应该真正升级,最好是升级到14.10版,可能是12.10版(但这已经是它的维护周期的末尾了,您应该真正升级到14.10版)。如果您仍在使用Informix的任何版本10或11,您应该真正升级,最好是升级到14.10版,可能会升级到12.10(但这已经是它的维护周期的末尾了-你真的应该升级到14.10)。