SQL 规范化数据 INSERT WHERE NOT EXISTS ;关于重复密钥更新

SQL normalized data INSERT WHERE NOT EXISTS ; ON DUPLICATE KEY UPDATE

我正在使用 MySql Workbench 版本 6.3.9 和 mySql 5.6.35。

我有以下 tables:

设备

eID | caochID | eName

教练

教练ID |教练姓名

准备好SQLfiddle http://sqlfiddle.com/#!9/e333d/1

eID 是主键。不同的设备有多个coachID,所以不同的设备会有重复的coachID,但是eID是唯一的,因为它是主键。

需要 我需要在设备 table 中插入一行,如果它不存在的话。如果存在,什么也不做。

网上的各种帖子向我指出了两个选择:

a) 插入...在重复密钥更新时...

b)插入...不存在的地方

问题 我对这两种解决方案都有问题。对于第一个解决方案(ON DUPLICATE KEY UPDATE),查询根据需要插入行但不更新现有行。相反,它会创建一个新条目。对于第二个解决方案(WHERE NOT EXISTS)我得到一个错误:语法错误:'WHERE'(WHERE)在此位置不是有效输入。

sql 查询不需要进行任何连接。我列出了两个 table,以便您可以看到它们之间的关系。我需要的插入查询只会为设备 table.

插入

NOT EXISTS

insert into table2 (....)  --- all if not columns ... destination
select ....
from table1 t1   --- source of data to check
where not exists (
select 1
from table2 t2
where t2.col = t1.col   --- match source and destination table making sure table1 data is not in table2
)

您可以通过使用 tmp table 并确保当前 table 中不存在相同的记录来插入。添加 limit 1 以确保只插入一条记录。由于 1 和小球存在,下面的查询将不会插入。

INSERT INTO `Equipment` (`c_id`, `eName`)
SELECT * FROM (SELECT '1', 'small ball') tmp
WHERE NOT EXISTS (
    SELECT c_id FROM Equipment WHERE `c_id`='1' and `eName` = 'small ball' 
) LIMIT 1;