微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将唯一值插入postgresql

我在 postgresql中使用下面的命令创建一个表.

CREATE TABLE soMetable (
    id serial primary key,col1 int NOT NULL,col2 int NOT NULL,unique (col1,col2)
);

然后我执行2个插入语句.

>插入soMetable(col1,col2)值(1,11),(1,12);

它的工作
>插入soMetable(col1,13),14),11);

得到错误(key(col1,col2)=(1,11)已经存在.

但我需要避免重复对.怎么可能?

我试试这个

x86_64-pc-linux-gnu上的Postgresql 9.5.0,由gcc编译的gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2,64位和Postgresql 9.3,由gcc编译(Ubuntu 4.8. 2-19ubuntu1)4.8.2,64位

但我得到了错误

执行两个语句后我需要这样做.

(1,12),14)

解决方法

您可以使用insert执行此操作. . .选择:

insert into soMetable(col1,col2) 
    select col1,col2
    from (select 1 as col1,13 as col2 union all
          select 1,14 union all
          select 1,11
         ) t
    where not exists (select 1
                      from soMetable st
                      where st.col1 = t.col1 and st.col2 = t.col2
                     );

也就是说,在插入之前过滤掉值.

编辑:

作为一个没有名字的马,你也可以这样写:

insert into soMetable(col1,col2
    from (values (1,11)
         ) as t(col1,col2)
    where not exists (select 1
                      from soMetable st
                      where st.col1 = t.col1 and st.col2 = t.col2
                     );

我倾向于使用union all方法,因为并非所有数据库支持使用values()语句.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐