Сопоставление записей с отсутствующими данными - PullRequest
1 голос
/ 22 апреля 2019

У меня есть таблица с 5 столбцами.

Я не хочу, чтобы INSERT происходил, если какие-либо 3 из 5 столбцов соответствовали какой-либо существующей записи, т.е. другие 2 столбца имели отличающиеся или отсутствующие значения.

Возможно ли это?Если да, то как?

Я использую SQL Server

1 Ответ

0 голосов
/ 22 апреля 2019

Если я вас правильно понимаю, подсчет совпадений является одним из возможных подходов:

Ввод:

CREATE TABLE #Data (
    Column1 varchar(10),   
    Column2 varchar(10),   
    Column3 varchar(10),   
    Column4 varchar(10),   
    Column5 varchar(10)
)
INSERT INTO #Data 
   (Column1, Column2, Column3, Column4, Column5)
VALUES
    ('Value1', 'Value2', 'Value3', 'Value4', 'Value5'),
    ('alue1',  'Value2', 'Value3', 'alue4',  'Value'),
    ('alue1',  'Value2', 'Value3', 'Value4', 'Value5'),
    ('alue1',  'Value2', 'Value3', 'Value4', 'Value5'),
    ('Value1', 'Value2', 'Value3', 'Value4', 'Value5')

Заявление:

-- New values
DECLARE @value1 varchar(10)
DECLARE @value2 varchar(10)
DECLARE @value3 varchar(10)
DECLARE @value4 varchar(10)
DECLARE @value5 varchar(10)
SET @value1 = 'Value1'
SET @value2 = 'Value2'
SET @value3 = 'Value3'
SET @value4 = 'Value4'
SET @value5 = 'Value5'

-- Statement
IF NOT EXISTS (
    SELECT *
    FROM #Data
    WHERE (
        CASE WHEN Column1 = @value1 THEN 1 ELSE 0 END +
        CASE WHEN Column2 = @value2 THEN 1 ELSE 0 END +
        CASE WHEN Column3 = @value3 THEN 1 ELSE 0 END +
        CASE WHEN Column4 = @value4 THEN 1 ELSE 0 END +
        CASE WHEN Column5 = @value5 THEN 1 ELSE 0 END
        ) >= 3
)
INSERT INTO #Data
   (Column1, Column2, Column3, Column4, Column5)
VALUES
    (@Value1, @Value2, @Value3, @Value4, @Value5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...