我正在使用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查询不需要进行任何连接。我列出了两个表格,以便您可以看到它们的相关性。我需要的插入查询只会插入设备表。
答案 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
)