首页 > 解决方案 > PostgreSQL 中的 INSERT 与 ON CONFLICT 可以在 SQL 中是有条件的吗

问题描述

我有以下 SQL 查询:

WITH inserted_id AS (
    INSERT INTO users (email,name,user_id,user_name,source)
        VALUES (
                'a',
                'b',
                'c',
                'd',
                'e')
        ON CONFLICT (email) DO UPDATE SET
            user_id='c',
            user_name='d',
            source='e'
        RETURNING id AS users_id
)
INSERT INTO users_groups (users_id, groups_id)
SELECT users_id, 5 FROM inserted_id;

我希望第二个INSERTusers_groups第一个INSERT完成没有任何冲突为条件——也就是说,该ON CONFLICT部分没有运行。这可以通过查询完成还是我需要更改什么?

标签: sqlpostgresql

解决方案


您正在 中做某事on conflict,因此将返回该行。

我认为你可以这样做:

INSERT INTO users_groups (users_id, groups_id)
    SELECT users_id, 5
    FROM inserted_id
    WHERE users_id <> 'aa';

如果可以,您可以简单地使用on conflict do nothing. 那么id就不会返回了。


推荐阅读