SQL规范化数据INSERT WHERE NOT EXISTS;在DUPLICATE KEY UPDATE

时间:2018-04-17 00:11:25

标签: mysql sql workbench

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

我有以下表格:

设备

eID | caochID |易名

COACH

coachID | coachName

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

eID是主键。在不同的设备中有多个coachID,因此将存在具有不同设备的重复的coachID,但是eID将是唯一的,因为它是主键。

REQUIRED 我需要在设备表中插入一行,如果它还不存在的话。如果存在,则不执行任何操作。

在线的各种帖子都指向了两个选项:

a)INSERT ... ON DUPLICATE KEY UPDATE ...

b)INSERT ... WHERE NOT EXISTS

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

sql查询不需要进行任何连接。我列出了两个表格,以便您可以看到它们的相关性。我需要的插入查询只会插入设备表。

2 个答案:

答案 0 :(得分:1)

您可以使用tmp表插入并确保当前表中不存在相同的记录。添加限制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;

答案 1 :(得分:0)

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
)