在MySQL中的同一个表中插入行

时间:2016-11-09 11:17:28

标签: mysql insert mariadb

我正在执行以下INSERT查询:

INSERT INTO Elements
(EventID, TypeID) 
SELECT EventID, 2
FROM Elements
Where TypeID = 1

即。将Elements行与另一个TypeID插入同一个表中。它运作正常。

但是,如果某些行已存在TypeID = 2,则会出现问题。在这种情况下,我只想跳过这些行的INSERT并继续。

INSERT IGNORE对我不起作用,因为我对这些专栏没有独特之处或其他内容。我该怎么办?

2 个答案:

答案 0 :(得分:1)

此处的一个选项是添加唯一索引,然后使用INSERT IGNORE ... INTO执行插入:

ALTER TABLE Elements ADD UNIQUE unique_index (EventID, TypeID)

INSERT IGNORE INTO Elements (EventID, TypeID) 
SELECT EventID, 2
FROM Elements
WHERE TypeID = 1

如果EventID表中已存在TypeIDElements值对,则此插入将失败。

答案 1 :(得分:0)

在规范中查看GROUP BY和HAVING

INSERT INTO Elements
(EventID, TypeID) 
SELECT EventID, 2
FROM Elements
GROUP BY EventID
HAVING MAX(TypeID)=1