Insert multiple rows where not exists PostgresQL

后端 未结 2 1290
醉酒成梦
醉酒成梦 2021-01-05 00:19

I\'d like to generate a single sql query to mass-insert a series of rows that don\'t exist on a table. My current setup makes a new query for each record insertion similar t

2条回答
  •  一向
    一向 (楼主)
    2021-01-05 01:20

    Your select is not doing what you think it does.

    The most compact version in PostgreSQL would be something like this:

    with data(first_name, last_name, uid)  as (
       values
          ( 'John', 'Doe', '3sldkjfksjd'),
          ( 'Jane', 'Doe', 'adslkejkdsjfds')
    ) 
    insert into users (first_name, last_name, uid) 
    select d.first_name, d.last_name, d.uid
    from data d
    where not exists (select 1
                      from users u2
                      where u2.uid = d.uid);
    

    Which is pretty much equivalent to:

    insert into users (first_name, last_name, uid) 
    select d.first_name, d.last_name, d.uid
    from (
       select 'John' as first_name, 'Doe' as last_name, '3sldkjfksjd' as uid
       union all
       select 'Jane', 'Doe', 'adslkejkdsjfds'
    ) as d
    where not exists (select 1
                      from users u2
                      where u2.uid = d.uid);
    

提交回复
热议问题