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)
展开
 我来答
c6iz
2012-08-02 · TA获得超过1417个赞
知道大有可为答主
回答量:1426
采纳率:100%
帮助的人:1035万
展开全部
你可以分两部份导入
先导入在表里有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列是主健,但有些数据就没了
呆槑呆818
2012-08-02 · 超过19用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:37.8万
展开全部
merge语句处理,根据条件选择插入还是更新,但是我不知道mysql是否支持
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式