在Postgresql中,如何根据列值相同或不相同的情况插入到表中
我正在向表中插入数据,如下所示在Postgresql中,如何根据列值相同或不相同的情况插入到表中,sql,postgresql,Sql,Postgresql,我正在向表中插入数据,如下所示 | num | name | value | ---------------------------------- | 1 | name1 | 1 | | 2 | name2 | 1 | | 3 | name3 | 1 | | 4 | name4 | 2 | | 5 | name5 | 3 | 我想插入wh
| num | name | value |
----------------------------------
| 1 | name1 | 1 |
| 2 | name2 | 1 |
| 3 | name3 | 1 |
| 4 | name4 | 2 |
| 5 | name5 | 3 |
我想插入where子句,比如insert into table num,name,value 6,name,1,当num和value一起不存在于任何一行中时
我试图根据结果选择first和insert,但我认为这不是我希望在单个查询中使用的最佳方式
尝试如下:从name=$name和value=$value的表中选择*如果我得到结果,则不插入,否则插入。它是通过两个查询完成的,但我不想要它
将通知任何帮助。使用唯一约束强制num、value的唯一性: 然后,数据库确保表的完整性—这些值是唯一的。你不必明确地这样做
请注意,如果违反了unique约束,则会出现错误,插入操作将与可能插入的其他行一起中止。如果您想忽略错误,可以使用on conflict ignore。基本上,首先需要检查表中是否已经存在具有相同num和值的记录。如果存在,则不插入其他项插入新记录 为此,您可以尝试使用以下步骤插入值:
EXEC dbo.InsertRecVali(1,'abc',6)
以下程序将根据您的需要提供帮助:
create procedure InsertRecVali(@num int,@name varchar(max),@value int)
as
begin
if not exist(select 1 from table where num=@num and value=@value)
insert into table values(@num,@name,@value)
Else
PRINT 'Cannot Insert Duplicate Value'
End;
创建过程后,通过传递要插入到表中的值来执行此过程
所以,在表中插入记录之前,它将检查表中是否已经存在具有相同num和值的记录,然后它将不插入该记录,并给出错误“无法插入重复值”
否则,如果表中不存在具有相同num和值的记录,则只有它将在表中插入记录
以下是执行此过程的示例:
EXEC dbo.InsertRecVali(1,'abc',6)
如果尝试插入并破坏它们的唯一性会怎么样。其他没有唯一值的行将被插入或不被插入,如果有错误,我如何才能获得插入id我想要一个简单的查询而不具有唯一性,你能告诉我@Gordon吗Linoff@bala . . . 正如答案中所指出的,您可以使用on conflict忽略错误。。。。autoincrement增加了它是否插入。我的意思是,在不插入但自动增量增加@Gordon Linoff的冲突中,除了应该用a完成这一事实之外,这个特定的存储过程是一个竞争条件,将导致在高负载下插入。也就是说,如果是SQL Server,它会的,但是OP询问PostgreSQL,这种语法在哪里不起作用。