У меня есть структура таблицы.
CREATE TABLE test_duplicate_join
(
vendor INT,
buyside INT,
columnnme VARCHAR(32),
mappingid INT ,
columntype VARCHAR(32)
);
ALTER TABLE test_duplicate_join ADD PRIMARY KEY(mappingId);
ALTER TABLE test_duplicate_join
MODIFY mappingId INT NOT NULL AUTO_INCREMENT;
CREATE UNIQUE INDEX idx_name_phone ON test_duplicate_join(vendor,buyside,columnnme,columntype);
INSERT INTO test_duplicate_join (vendor,buyside,columntype)
VALUES (0,34,'Excel'),(0,35,'A');
После этого, если я попытаюсь вставить (0,34, 'Excel'),(1,36, 'fd')
вместе, он должен вставить только значение 2nd .
Я попытался с помощью игнорирования вставки (функция MYSQL), где я делаю уникальный идентификатор для всех столбцов.
Но есть проблема, если значения имеют нулевое значение, тогда уникальное не работает.Мои данные могут иметь нулевые значения.Но это также должно быть уникальным.
Я знаю, что это ожидаемое поведение.Но как я могу получить требуемую функциональность?
Если две строки содержат одинаковые данные, кроме моего идентификатора автоинкремента, то это дубликат.
Обновление 1 :: Для одиночной вставки мы можем сделать это такесли только columnnme может быть пустым.Для других столбцов мы можем поставить case
.Как сделать для нескольких вставок вместе?
INSERT INTO test_duplicate_join (vendor,buyside,columnnme) SELECT 0,0,NULL
WHERE NOT EXISTS
( SELECT 1 FROM test_duplicate_join d WHERE
d.vendor = 0
AND
d.buyside = 0
AND
d.columnnme = (CASE WHEN ISNULL(NULL) THEN columnnme IS NULL ELSE
columnnme=NULL END) )