sql规范化数据插入不存在的地方;重复密钥更新时

ghhkc1vu  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(387)

我正在使用mysql workbench版本6.3.9和mysql 5.6.35。
我有以下表格:
设备
开斋节
教练
coachid | coachname公司
sqlfiddle已准备好http://sqlfiddle.com/#!9/e333d/1号
eid是主键。在不同的设备中有多个coachid,因此在不同的设备中会有重复的coachid,但是eid是唯一的,因为它是主键。
必需如果设备表不存在,我需要在设备表中插入一行。如果存在,什么也不做。
网上的各种帖子给我指出了两个选择:
a) 在重复密钥更新时插入。。。
b) 在不存在的地方插入
问题我对这两种解决方案都有问题。对于第一个解决方案(在重复键更新时),查询会根据需要插入行,但不会更新现有行。相反,它会创建一个新条目。对于第二个解决方案(where not exists),我得到一个错误:语法错误:“where”(where)在此位置不是有效的输入。
sql查询不需要进行任何连接。我列出了这两个表,以便您可以看到它们之间的关系。我需要的insert查询将只插入设备表。

igsr9ssn

igsr9ssn1#

可以通过使用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;
dbf7pr2w

dbf7pr2w2#

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
)

相关问题