Как вставить в значения без дубликатов? - PullRequest
0 голосов
/ 05 июня 2019

Я создал новую таблицу в другой базе данных с именем «работники»:

CREATE TABLE workers (
ID_WORKER int(11) NOT NULL,
FNAME varchar(20) NOT NULL,
LNAME varchar(20) NOT NULL,
WORKERS_GROUP varchar(20) NOT NULL,
POSITION varchar(50) NOT NULL,
CARD_NUMBER varchar(30) NOT NULL
)

Какой столбец 'ID_WORKER' установлен на AUTO_INCREMENT. Тогда я впервые вставил только одну запись:

INSERT INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER) 
VALUES ('Paul', 'King', 'IT', 'Programmer', '');

Но в следующий раз я попробовал вставить другие методы (которые я опишу, что я пробовал), и у меня было несколько дубликатов.

Что я пробовал?

Я пробовал вставить без дубликатов как минимум 3 метода:

1) ВСТАВИТЬ ИГНОРА В:

INSERT IGNORE INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER)

2) ЗАМЕНИТЬ НА:

REPLACE INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER) 
VALUES ('Paul', 'King', 'IT', 'Programmer', '');

3) ПО ВСТАВЛЕНИЮ ... НА ДУБЛИКОВАТЬ КЛЮЧ ОБНОВЛЕНИЯ:

INSERT INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER) 
VALUES ('Paul', 'King', 'IT', 'Programmer', '') 
ON DUPLICATE KEY UPDATE FNAME = 'Paul' AND LNAME = 'King' AND WORKERS_GROUP = 'IT' AND POSITION = 'Programmer' AND CARD_NUMBER = ''

И никто из них не работал. Я понятия не имею или не знаю, где я могу их найти. Любые идеи, спасибо за любую помощь.

EDIT

Что касается дубликатов, то могут быть все из них, но в этом случае работник с тем же FNAME, LNAME может быть в том же WORKER_GROUP, если у него / нее должны быть другие POSITION и CARD_NUMBER .

1 Ответ

0 голосов
/ 05 июня 2019
INSERT INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER)
SELECT DISTINCT w1.FNAME, w1.LNAME, w1.WORKERS_GROUP, w1.POSITION, w1.CARD_NUMBER
FROM workers w1
WHERE NOT EXISTS (SELECT 1 
                  FROM workers w2
                  WHERE w2.FNAME = w1.FNAME
                    AND w2.LNAME= w1.LNAME
                    AND w2.WORKERS_GROUP= w1.WORKERS_GROUP
                    AND w2.POSITION = w1.POSITION
                    AND s2.CARD_NUMBER = w1.CARD_NUMBER)
...