我正在使用MySql Workbench版本6.3.9和mySql 5.6.35。
我有以下表格:
设备
eID | caochID | eName
长途汽车
教练ID | 教练名称
SQLfiddle prepare http://sqlfiddle.com/#!9/e333d/1
eID 是主键。 不同的设备中有多个教练ID,因此不同的设备会有重复的教练ID,但eID是唯一的,因为它是主键。
必需,我需要在设备表中插入一行(如果尚不存在)。如果存在,则不执行任何操作。
网上的各种帖子为我指出了两个选择:
a) 插入...在重复密钥更新时...
b)插入。。。不存在的地方
问题我对这两种解决方案都有问题。 对于第一个解决方案(在重复键更新时) 查询根据需要插入行,但不更新现有行。 相反,它会创建一个新条目。 对于第二个解决方案(不存在的地方),我收到一个错误: 语法错误:"WHERE"(WHERE)在此位置不是有效的输入。
SQL 查询不需要进行任何联接。 我列出了这两个表,以便您可以看到它们之间的关系。 我需要的插入查询将只插入设备表。
您可以使用 tmp 表并确保当前表中不存在相同的记录来插入。 添加限制 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;
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
)