Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Сделать 2 поля уникальными, для определённого знач


Автор: polin11 20.3.2023, 14:54
Использую PGSQL. Есть таблица 

Код

CREATE TABLE forms (
    id serial PRIMARY KEY,
    account INT NOT NULL,
    author text,
    type INT NOT NULL
);
INSERT INTO  forms(account, author, salary) VALUES 
(1, 'Иванов', 11),
(2, 'Сидоров', 11),
(3, 'Сергеев', 12)


Нужно сделать набор полей (account, type) уникальным только для type = 11.
Например обе записи нельзя было бы вставить, так как type = 11

Код

(1, 'Иванов', 11),
(1, 'Сидоров', 11)



а например, записи можно было обе вставить, так как type != 11.
Код

(1, 'Иванов', 12),
(1, 'Сидоров', 12)



Как это можно сделать в PGSQL?

Автор: Akina 20.3.2023, 15:16
Код

CREATE UNIQUE INDEX idx ON forms ((CASE WHEN type = 11 THEN type END));

Уникальный индекс разрешает только одну запись с type = 11, но любое число записей с другими значениями type.
https://dbfiddle.uk/i5EBag1n

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)