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