关于多表联合更新一张表的SQL,有没高效的写法

[复制链接]
查看11 | 回复9 | 2014-4-18 06:00:22 | 显示全部楼层 |阅读模式
总表A:包含(A_ID、B_ID、C_ID、D_ID)
分表B:包含(B_ID、A_ID),分表C:包含(C_ID、A_ID),分表D:包含(D_ID、A_ID)
问题:有没一条高效的SQL把B、C、D三个分表的ID更新到总表A中?
回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
updateor merge
回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
oracle_cj 发表于 2014-11-2 21:12
updateor merge

我基础比较差,能不能拜托写一个例子我看看?
回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
本帖最后由 oracle_cj 于 2014-11-2 22:30 编辑
update a set a.b_id = b.b_id,a.c_id = c.c_id,a.d_id=d.d_id from,b,c,d where a.a_id = b.a_id and a.a_id = b.a_id and a.a_id = c.a_id and a.a_id = d.a_id;
回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
oracle_cj 发表于 2014-11-2 21:35
update a set a.b_id = b.b_id,a.c_id = c.c_id,a.d_id=d.d_id from a,b,c,d where a.a_id = b.a_id and a. ...

好像不能这么写
回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
〇〇 发表于 2014-11-2 21:49
好像不能这么写

为什么呢,我没验证过,直接写的


回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
oracle_cj 发表于 2014-11-2 21:35
update a set a.b_id = b.b_id,a.c_id = c.c_id,a.d_id=d.d_id from a,b,c,d where a.a_id = b.a_id and a. ...

还说没接触过mssql,你这tm的就是mssql的语法啊。坑爹
回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
需求不明。要是B表中有两个不同的B_ID对应同一个A_ID怎么办?
回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
试试这个:
merge into a
using (select a.a_id,b.b_id,c.c_id,d.d_id

from a left join b on a.a_id=b.a_id

left join c on a.a_id=c.a_id

left join d on a.a_id=d.a_id

where coalesce(b.a_id,c.a_id,d.a_id) is not NULL) t
on (a.a_id=t.a_id)
when matched then
update
set a.b_id=t.b_id,

a.c_id=t.c_id,

a.d_id=t.d_id ;

回复

使用道具 举报

千问 | 2014-4-18 06:00:22 | 显示全部楼层
要求是要a_id同时在B、C、D三张表才能更新吧。

update A set b_ID=(select * from b where a.A_ID=b.A_ID),
c_ID=(select * from c where a.A_ID=c.A_ID),
d_ID=(select * from d where a.A_ID=d.A_ID),
where exists (
select 1 from b where a.A_ID=b.A_ID
)
andexists (
select 1 from d where a.A_ID=d.A_ID
)
andexists (
select 1 from c where a.A_ID=c.A_ID
)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行