mysql 根据关联查询结果 修改 或者 添加 数据

       在工作中遇到了一个这样的问题,:更新一个表中的数据, 但是这个表的数据 是根据 多个表 才能查到, 即通过 select 查询出结果后,在通过查询出的结果 修改 或者添加 数据: 

1 基础数据:

1.1z_user 用户表:

  DLL语句


 
 
  1. CREATE TABLE `z_user` (
  2. `user_id` int( 23) NOT NULL AUTO_INCREMENT,
  3. `book_id` int( 23) DEFAULT NULL COMMENT '书籍ID',
  4. `game_id` int( 23) DEFAULT NULL COMMENT '游戏ID',
  5. `name` varchar( 255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '姓名',
  6. PRIMARY KEY (`user_id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT= 3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
表内容:

1.2 z_book 书籍表: 

DLL语句:


 
 
  1. CREATE TABLE `z_book` (
  2. `book_id` int( 23) NOT NULL AUTO_INCREMENT COMMENT '书ID',
  3. `book_name` varchar( 255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '书名',
  4. PRIMARY KEY (`book_id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT= 4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
表内容:


1.3 z_game 游戏表:

DLL语句:


 
 
  1. CREATE TABLE `z_game` (
  2. `game_id` int( 11) NOT NULL AUTO_INCREMENT COMMENT '游戏ID',
  3. `game_name` varchar( 255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '游戏名称',
  4. PRIMARY KEY (`game_id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT= 5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
表内容:

1.4 z_test  需要插入或者修改的表:

   DLL语句:


 
 
  1. CREATE TABLE `z_test` (
  2. `user_id` int( 23) NOT NULL,
  3. `user_name` varchar( 255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  4. `book_name` varchar( 255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  5. `game_name` varchar( 255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  6. PRIMARY KEY (`user_id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2 根据user_id插入语句:


 
 
  1. INSERT INTO z_test (
  2. user_id,
  3. user_name,
  4. book_name,
  5. game_name
  6. )
  7. select
  8. u.user_id,
  9. u.name as user_name,
  10. b.book_name,
  11. g.game_name
  12. from
  13. z_user u LEFT JOIN z_book b ON u.book_id = b.book_id
  14. LEFT JOIN z_game g ON u.game_id = g.game_id
  15. where u.user_id = 1

结果如下:


  成功!!

3 根据ID查询出相关信息后在修改:

   将 z_user,z_book,z_game 表中 的name属性名称加上"11"以作区别:

   update 语句如下:


 
 
  1. UPDATE z_test t,z_user u,z_book b,z_game g SET
  2. t.user_name = u.name,
  3. t.book_name = b.book_name,
  4. t.game_name = g.game_name
  5. WHERE 1= 1
  6. and t.user_id = u.user_id
  7. and b.book_id = u.book_id
  8. and g.game_id = u.game_id
  9. and u.user_id = 1

结果如下:

修改成功!

     总结:虽然这个是mysql的基础修改数据,但是还有很多细节需要注意,比如,insert的语句中查询出的字段一定要和需要插入的字段保持一致,不一致的话就使用"as" 用别名使之保持一致,否之无法插入;  在修改的时候,可能会出现 执行成功但是就是没有变化的情况,这时就要仔细看一下,你的条件是否正确, 我遇到的是: 已知user_id 那么 z_user表中 该id下的属性都是知道的, 必须使用 b.book_id = u.book_id 和 g.game_id = u.game_id 才能正确插入的情况, 虽然 用 "="号连接两边都会是相同的,自我感觉右边还得放已知条件才行,我也整的很懵逼,不知为何!


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值