Из ваших семи выражений у вас есть повторения, например, (playerid1 <> playerid2)
. Окончательный набор ограничен шестью.
Я бы предпочел иметь шесть различных ограничений, каждое из которых имеет осмысленное имя, для предоставления пользователю подробных сообщений об ошибках, например,
CONSTRAINT playerid2__duplicates__playerid1 CHECK ( playerid1 <> playerid2 ),
CONSTRAINT playerid3__duplicates__playerid1 CHECK ( playerid1 <> playerid3 ),
CONSTRAINT playerid4__duplicates__playerid1 CHECK ( playerid1 <> playerid4 ),
CONSTRAINT playerid3__duplicates__playerid2 CHECK ( playerid2 <> playerid3 ),
CONSTRAINT playerid4__duplicates__playerid2 CHECK ( playerid2 <> playerid4 ),
CONSTRAINT playerid4__duplicates__playerid3 CHECK ( playerid3 <> playerid4 )
Может быть интересно показать, что я написал выше, используя SQL:
WITH T
AS
(
SELECT *
FROM (
VALUES ('playerid1'),
('playerid2'),
('playerid3'),
('playerid4')
) AS T (c)
)
SELECT 'CONSTRAINT '
+ T2.c + '__duplicates__' + T1.c
+ ' CHECK ( ' + T1.c + ' <> ' + T2.c + ' ),'
FROM T AS T1, T AS T2
WHERE T1.c < T2.c;