在 Informix 中使用 WHERE NOT EXISTS in same table 和复合 PK

Use WHERE NOT EXISTS in same table with composite PK in Informix

我有一个 table 在 Informix 数据库中包含 5 个字段的组合,我需要复制一些值并仅更改 rm_id 字段。那部分已经在工作了。尝试复制它时出现问题,并且已经存在具有这 5 个值的一行,并且我收到 Unique constraint violated 错误。我开始为此写一个查询,我这样做了:

SELECT *
FROM table t1
WHERE t1.rm_id = 249
AND NOT EXISTS (SELECT t2.prop, t2.rb_code, t2.bm_id, t2.bl, t2.rm_id
FROM table t2
WHERE t2.prop = t1.prop, t2.rb_code = t1.rb_code, t2.bm_id = t1.bm_id, t2.bl = t1.bl, t2.rm_id = t1.rm_id);

我收到语法错误,但我的查询找不到任何问题;有什么方法可以在 Informix 中做这样的事情吗?

使用 AND 而不是逗号来分隔 WHERE 子句中的条件。

SELECT *
  FROM table t1
 WHERE t1.rm_id = 249
   AND NOT EXISTS (SELECT t2.prop, t2.rb_code, t2.bm_id, t2.bl, t2.rm_id
                     FROM table t2
                    WHERE t2.prop = t1.prop
                      AND t2.rb_code = t1.rb_code
                      AND t2.bm_id = t1.bm_id
                      AND t2.bl = t1.bl
                      AND t2.rm_id = t1.rm_i
                  );

此外,对于 [NOT] EXISTS 操作,将什么列为 select 列表项并不重要。按照惯例列出NOT EXISTS(SELECT * FROM …).