在 MySQL 中的相同 table 中插入行

Inserting rows in the same table in MySQL

我正在执行以下 INSERT 查询:

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

即使用另一个 TypeID 在相同的 table 中插入元素行。它工作正常。

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

INSERT IGNORE 对我不起作用,因为我没有这些列的唯一性或其他内容。我能做什么?

查看规范中的 GROUP BY 和 HAVING

INSERT INTO Elements
(EventID, TypeID) 
SELECT EventID, 2
FROM Elements
GROUP BY EventID
HAVING MAX(TypeID)=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

如果 EventIDTypeID 对值已存在于 Elements table.

中,则此插入将失败