Как я могу вставить в таблицу на основе значения столбца или нет в Postgresql - PullRequest
2 голосов
/ 15 апреля 2020

Я вставляю данные в таблицу выглядит следующим образом

|   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) values(6,name,1) when (num and value together) not exist в любой строке вместе

Я пытался сначала выбрать и вставить на основании этого результата, но я думаю, что это не самый лучший способ, которым я хочу, чтобы это было в одном запросе

попытался так: select * from the table where name=$name and value= $value if I got result then not insert otherwise insert. Это было сделано с двумя запросами, но я не хочу этого.

Любая помощь будет оценена.

Ответы [ 2 ]

4 голосов
/ 15 апреля 2020

Используйте уникальное ограничение для обеспечения уникальности для (num, value):

alter table t add constraint unq_t_num_value unique (num, value);

Тогда база данных гарантирует, что целостность таблицы - что эти значения уникальны. Вам не нужно делать это явно.

Обратите внимание, что если ограничение уникальности нарушается, вы получаете ошибку, и insert прерывается (вместе с другими строками, которые могут быть вставлены). Если вы хотите игнорировать ошибку, вы можете использовать on conflict ignore.

0 голосов
/ 15 апреля 2020

По сути, сначала вам нужно проверить, присутствует ли запись с тем же номером и значением в таблице. если он присутствует, не вставляйте, вставьте новую запись.

, для этого вы можете попытаться вставить значение с помощью процедуры:

нижеприведенная процедура поможет в зависимости от ваших потребностей:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...