V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
reguse
V2EX  ›  MySQL

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

  •  
  •   reguse · 2017-10-17 11:13:14 +08:00 · 2978 次点击
    这是一个创建于 2593 天前的主题,其中的信息可能已经有所发展或是发生改变。
    表 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
    4 条回复    2017-10-17 15:46:48 +08:00
    Hyeongo
        1
    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
        2
    reguse  
    OP
       2017-10-17 13:26:51 +08:00
    @Hyeongo 多谢,还是有点问题,不过在 where 后加个 select 解决了
    doublleft
        3
    doublleft  
       2017-10-17 15:45:54 +08:00
    问个问题,这种一对多查询,查 b.id 等于所有 a.id 的所有 a 表数据,是用 inner join 一次拉出来好,写子查询好,还是放在业务层先拉 a.id 然后在 b 库里 WHERE id in() 好?
    doublleft
        4
    doublleft  
       2017-10-17 15:46:48 +08:00
    接上

    @Hyeongo 请问有什么具体场景区分吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:11 · PVG 07:11 · LAX 15:11 · JFK 18:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.