如何插入没有重复的值?

时间:2019-06-05 09:01:29

标签: mysql duplicates insert-update insert-into

我在另一个名为“ workers”的数据库上创建了新表:

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
)

在“ AUTO_INCREMENT”上设置了“ ID_WORKER”列。然后第一次我只插入一条记录:

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 ...在重复的密钥更新上:

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 = ''

它们都没有起作用。我不知道或不知道在哪里可以找到它们。任何想法都需要任何帮助。

编辑

关于重复项可以全部复制,但是在这种情况下,具有相同FNAME, LNAME的工人可以位于同一WORKER_GROUP中,因为他/她必须拥有另一个{{1 }}和POSITION

1 个答案:

答案 0 :(得分:-1)

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)