为什么我的PG中出现关于冲突插入的模棱两可的列?

时间:2019-06-07 02:45:47

标签: postgresql sql-insert upsert

这是我的查询:

insert into zoning_algorithm_value (algorithm_value_id, value, zoning_id)
values (
           61,
           21,
           7321
       )
on conflict(algorithm_value_id)
    DO
        update set value = 21 where zoning_id = 7321 and algorithm_value_id = 61;

我只引用一张表。这是我遇到的错误。

  

[42702]错误:列引用“ zoning_id”不明确

只有一个表和一列具有该名称时,如何将其模棱两可?我该如何使此upsert工作?

1 个答案:

答案 0 :(得分:1)

您需要指定表名或EXCLUDED来放在WHERE子句中的字段之前。

例如,如果您只想在“新” valuezoning_id分别为7321和61时更新algorithm_value_id

insert into zoning_algorithm_value (algorithm_value_id, value, zoning_id)
values (61, 21, 7321)
on conflict(algorithm_value_id)
    DO
        update set value = 21 where EXCLUDED.zoning_id = 7321 and EXCLUDED.algorithm_value_id = 61;

如果您希望WHERE引用“现有”记录值,请使用表名。