免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1630 | 回复: 4
打印 上一主题 下一主题

求助,多表关联更新问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-26 09:20 |只看该作者 |倒序浏览
目前有三个表A(uacct,user_name),B(uid,username),C(uid,realname);

A.user_uacct=B.username

B.uid=C.uid

想取出A.user_name更新到C.realname. 如何写出批量更新的SQL呢,谢谢。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
2 [报告]
发表于 2016-09-27 11:02 |只看该作者
回复 1# Linux521
试一下:
  1. mysql> select * from A;
  2. +-------+-----------+
  3. | uacct | user_name |
  4. +-------+-----------+
  5. | aaa   | axx       |
  6. | bbb   | bxx       |
  7. | ccc   | cxx       |
  8. +-------+-----------+
  9. 3 rows in set

  10. mysql> select * from B;
  11. +-----+-----------+
  12. | uid | user_name |
  13. +-----+-----------+
  14. | 1   | aaa       |
  15. | 2   | bbb       |
  16. | 3   | ccc       |
  17. +-----+-----------+
  18. 3 rows in set

  19. mysql> select * from C
  20. ;
  21. +-----+----------+
  22. | uid | realname |
  23. +-----+----------+
  24. | aaa | NULL     |
  25. | bbb | NULL     |
  26. | ccc | NULL     |
  27. +-----+----------+
  28. 3 rows in set

  29. mysql> update A, B, C set realname = A.user_name where A.uacct = B.user_name and B.uid = C.uid;
  30. Query OK, 3 rows affected
  31. Rows matched: 3  Changed: 3  Warnings: 0
  32. mysql> select * from C;
  33. +-----+----------+
  34. | uid | realname |
  35. +-----+----------+
  36. | 1   | axx      |
  37. | 2   | bxx      |
  38. | 3   | cxx      |
  39. +-----+----------+
  40. 3 rows in set

  41. mysql>
复制代码


论坛徽章:
22
辰龙
日期:2014-09-06 16:07:2715-16赛季CBA联赛之浙江
日期:2016-01-21 14:49:4815-16赛季CBA联赛之江苏
日期:2016-12-20 14:25:4515-16赛季CBA联赛之新疆
日期:2016-12-22 14:47:2015-16赛季CBA联赛之山西
日期:2017-03-03 10:32:2115-16赛季CBA联赛之天津
日期:2017-03-06 14:29:2515-16赛季CBA联赛之江苏
日期:2017-06-23 16:02:4515-16赛季CBA联赛之北京
日期:2017-07-25 17:24:5915-16赛季CBA联赛之广东
日期:2017-09-27 14:47:4215-16赛季CBA联赛之辽宁
日期:2017-11-08 09:13:5415-16赛季CBA联赛之同曦
日期:2016-01-07 14:25:30技术图书徽章
日期:2015-12-23 09:50:33
3 [报告]
发表于 2016-09-27 11:21 |只看该作者
回复 2# seesea2517
不对吧,你的例子中B.uid=C.uid吗

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2016-09-27 15:40 |只看该作者
回复 3# will009
感谢指出,那是最初的输出,后来测试发现做错测试数据了,改完后直接测试没重新输出截图了,这是改下后的 uid 数据:
  1. ysql> select * from B;
  2. +-----+-----------+
  3. | uid | user_name |
  4. +-----+-----------+
  5. | 1   | aaa       |
  6. | 2   | bbb       |
  7. | 3   | ccc       |
  8. +-----+-----------+
  9. 3 rows in set

  10. mysql> select * from C
  11. ;
  12. +-----+----------+
  13. | uid | realname |
  14. +-----+----------+
  15. | 1   | axx      |
  16. | 2   | bxx      |
  17. | 3   | cxx      |
  18. +-----+----------+
  19. 3 rows in set
复制代码


论坛徽章:
0
5 [报告]
发表于 2016-10-13 17:03 |只看该作者
本帖最后由 Linux521 于 2016-10-13 17:06 编辑

感谢 seesea2517 will009   。已解决,当时想多了点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP