请教下两表更新(一对多)问题

2017-10-17 11:13:14 +08:00
 reguse
表 A
x y
1 a
2 b
3 c

表 B
x y
1.1 aa
1.2 aaa
2.1 bb
2.2 bbb
2.3 bbbb
3.1 c

结果
x y
1.1 a
1.2 a
1.3 a
2.1 b
2.2 b
2.3 b
3.1 c

根据表 A 的 x 来更新表 B 的 y,也就是表 B 中 1.x 的都属于表 A 中的 1,然后将表 B 中的 y 更新成表 A 中对应的 y。
Oracle 应该怎样写?下面的 sql 有问题
update B set y=(select y from A where A.x=substr(B.x,0,1)) where substr(B.x,0,1) = A.x
2984 次点击
所在节点    MySQL
4 条回复
Hyeongo
2017-10-17 11:21:29 +08:00
update B
set y=tba.y
from B,A tba where tba.x=substr(B.x,0,1)
这样试试
reguse
2017-10-17 13:26:51 +08:00
@Hyeongo 多谢,还是有点问题,不过在 where 后加个 select 解决了
doublleft
2017-10-17 15:45:54 +08:00
问个问题,这种一对多查询,查 b.id 等于所有 a.id 的所有 a 表数据,是用 inner join 一次拉出来好,写子查询好,还是放在业务层先拉 a.id 然后在 b 库里 WHERE id in() 好?
doublleft
2017-10-17 15:46:48 +08:00
接上

@Hyeongo 请问有什么具体场景区分吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398259

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX