mysql 存储过程 若主键冲突则更新,不冲突则插入数据
我写了一个存储过程,需要往一个主键为IDDATE的表里插入数据。当主键冲突的时候,就更新数据,不冲突的时候则插入新数据。但是麻烦的是这批数据是select出来的批量数据,...
我写了一个存储过程,需要往一个主键为 IDDATE的表里插入数据。
当主键冲突的时候,就更新数据,不冲突的时候则插入新数据。
但是麻烦的是这批数据是select出来的批量数据,请问如何在满足上述条件的情况下,批量插入和更新?
比如说以下这个语句,怎样可以实现 id是主键
insert into table1
select
a.id as id,
a.c_id as cid,
b.m_id as mid,
c.name as name
from
table_A a,
table_B b,
table_C c
where
b.id=a.c_id
and c.id=b.m_id
ON DUPLICETE KEY UPDATE
c_id=values(a.c_id),
m_id=values(b.m_id),
name=values(c.name) 展开
当主键冲突的时候,就更新数据,不冲突的时候则插入新数据。
但是麻烦的是这批数据是select出来的批量数据,请问如何在满足上述条件的情况下,批量插入和更新?
比如说以下这个语句,怎样可以实现 id是主键
insert into table1
select
a.id as id,
a.c_id as cid,
b.m_id as mid,
c.name as name
from
table_A a,
table_B b,
table_C c
where
b.id=a.c_id
and c.id=b.m_id
ON DUPLICETE KEY UPDATE
c_id=values(a.c_id),
m_id=values(b.m_id),
name=values(c.name) 展开
2个回答
展开全部
你可以分两部份导入
先导入在表里有IDDATE的更新部份
mysql> UPDATE 表1 SET 列名=(SELECT 列名 FROM 表2
WHERE 表1.IDDATE=表2.IDDATE)
WHERE IDDATE in (SELECT IDDATE FROM 表2);
再导入插入部份
INSERT INTO 表1 (SELECT IDDATE,列名 FROM 表2
WHERE DDATE not in (SELECT IDDATE FROM 表2));
先导入在表里有IDDATE的更新部份
mysql> UPDATE 表1 SET 列名=(SELECT 列名 FROM 表2
WHERE 表1.IDDATE=表2.IDDATE)
WHERE IDDATE in (SELECT IDDATE FROM 表2);
再导入插入部份
INSERT INTO 表1 (SELECT IDDATE,列名 FROM 表2
WHERE DDATE not in (SELECT IDDATE FROM 表2));
追问
不可能这样做的,数据写在SP里,每次过来的数据流都是单条数据。
追答
按你补充的提问,想实现ID是主键,可以把TABLE_A的ID列进行分组
insert into table1
select
a.id as id,
a.c_id as cid,
b.m_id as mid,
c.name as name
from
(select id,max(c_id) from table_A group by id) a,
table_B b,
table_C c
where
b.id=a.c_id
and c.id=b.m_id
ON DUPLICETE KEY UPDATE
c_id=values(a.c_id),
m_id=values(b.m_id),
name=values(c.name)
当然这样得到的数据是确保了ID列是主健,但有些数据就没了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |