成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL如何實現查詢數據并根據條件更新到另一張表?

數據庫 MySQL
作者個人研發的在高并發場景下,提供的簡單、穩定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。

[[352779]]

作者個人研發的在高并發場景下,提供的簡單、穩定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業提供了精準定時調度方案,經受住了生產環境的考驗。為使更多童鞋受益,現給出開源框架地址:https://github.com/sunshinelyz/mykit-delay

數據案例

原本的數據庫有3張表。

  • t_user :用戶表,存放用戶的基本信息。
  • t_role :角色表,存放角色信息。
  • t_role_user:存放角色與用戶的對應關系。

因為業務邏輯的改變,現在要把它們合并為一張表,把t_role中的角色信息插入到t_user中。

首先獲取到所有用戶對應的角色,以用戶ID分組,合并角色地到一行,以逗號分隔。

  1. SELECT t_user.id,GROUP_CONCAT(t_role.content) FROM t_user LEFT JOIN t_role_user on t_user.id = t_role_user.t_user_id LEFT JOIN t_role ON t_role_user.t_role_id = t_role.id GROUP BY t_user.id 

先把查到的數據存放到了一個新建的表mid里

  1. INSERT into mid (t_user_id,t_role_info) SELECT t_user.id,GROUP_CONCAT(t_role.info) FROM t_user LEFT JOIN t_role_user on t_user.id = t_role_user.t_user_id LEFT JOIN t_role ON t_role_user.t_role_id = t_role.id GROUP BY t_user.id 

然后將mid表的數據更新到t_user里,因為是更新,所以不能用insert into select from 語句了

  1. update t_user,mid set t_user.t_role_info = mid.t_role_info where t_user.id = mid.t_user_id 

成功將目的地以逗號分隔的字符串形式導入t_user表中

說一下用到的幾個方法,group_concat

group_concat( [DISTINCT] 要連接的字段 [Order BY 排序字段 ASC/DESC] [Separator '分隔符'] ),該函數能夠將相同的行組合起來

  1. select * from goods; 
  2. +------+------+ 
  3. | id| price| 
  4. +------+------+ 
  5. |1 | 10| 
  6. |1 | 20| 
  7. |1 | 20| 
  8. |2 | 20| 
  9. |3 | 200 | 
  10. |3 | 500 | 
  11. +------+------+ 
  12. rows in set (0.00 sec) 

以id分組,把price字段的值在同一行打印出來,逗號分隔(默認)

  1. select id, group_concat(price) from goods group by id; 
  2. +------+--------------------+ 
  3. | id| group_concat(price) | 
  4. +------+--------------------+ 
  5. |1 | 10,20,20| 
  6. |2 | 20 | 
  7. |3 | 200,500| 
  8. +------+--------------------+ 
  9. rows in set (0.00 sec) 

以id分組,把price字段去重打印在一行,逗號分隔

  1. select id,group_concat(distinct price) from goods group by id; 
  2. +------+-----------------------------+ 
  3. | id| group_concat(distinct price) | 
  4. +------+-----------------------------+ 
  5. |1 | 10,20| 
  6. |2 | 20 | 
  7. |3 | 200,500 | 
  8. +------+-----------------------------+ 
  9. rows in set (0.00 sec) 

以id分組,把price字段的值打印在一行,逗號分隔,按照price倒序排列

 

  1. select id,group_concat(price order by price descfrom goods group by id; 
  2. +------+---------------------------------------+ 
  3. | id| group_concat(price order by price desc) | 
  4. +------+---------------------------------------+ 
  5. |1 | 20,20,10 | 
  6. |2 | 20| 
  7. |3 | 500,200| 
  8. +------+---------------------------------------+ 
  9. rows in set (0.00 sec) 

insert into select from 將查詢到的記錄插入到某個表中

  1. INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name 

要求目標db2必須存在,下面測試一下,有兩個表,結構如下

  1. select * from insert_one; 
  2. +----+--------+-----+-----+ 
  3. | id | name  | age | sex | 
  4. +----+--------+-----+-----+ 
  5. | 1 | 冰河001 | 25 |   | 
  6. | 2 | 冰河002 | 26 |   | 
  7. | 3 | 冰河003 | 28 |   | 
  8. | 4 | 冰河004 | 30 |   | 
  9. +----+--------+-----+-----+ 
  10. rows in set 
  11.  
  12.   
  13. select * from insert_sex; 
  14. +----+-----+ 
  15. | id | sex | 
  16. +----+-----+ 
  17. | 1 | 1  | 
  18. | 2 | 2  | 
  19. | 3 | 1  | 
  20. | 4 | 2  | 
  21. +----+-----+ 
  22. rows in set 

從表2中查找性別數據,插入到表1中

  1. into insert_one(sex) select sex from insert_sex; 
  2. Query OK, 4 rows affected 
  3. select * from insert_one; 
  4. +----+--------+-----+-----+ 
  5. | id | name  | age | sex | 
  6. +----+--------+-----+-----+ 
  7. | 1 | 田小斯 | 25 |   | 
  8. | 2 | 劉大牛 | 26 |   | 
  9. | 3 | 鄭大錘 | 28 |   | 
  10. | 4 | 胡二狗 | 30 |   | 
  11. | 5 |    |   | 1  | 
  12. | 6 |    |   | 2  | 
  13. | 7 |    |   | 1  | 
  14. | 8 |    |   | 2  | 
  15. +----+--------+-----+-----+ 
  16. rows in set 

結果很尷尬,我是想要更新這張表的sex字段,而不是插入新的數據,那么這個命令只適用于要把數據導入空表中,所以在上面的實際需要中,我建立了新表mid,利用update來中轉并更新數據

  1. UPDATE tb1,tb2 SET tb1.address=tb2.address WHERE tb1.name=tb2.name 

根據條件匹配,把表1的數據替換為(更新為)表2的數據,表1和表2必須有關聯才可以

  1. update insert_one,insert_sex set insert_one.sex = insert_sex.sex where insert_one.id = insert_sex.id; 
  2. Query OK, 4 rows affected 
  3. select * from insert_one; 
  4. +----+--------+-----+-----+ 
  5. | id | name  | age | sex | 
  6. +----+--------+-----+-----+ 
  7. | 1 | 冰河001 | 25 | 1  | 
  8. | 2 | 冰河002 | 26 | 2  | 
  9. | 3 | 冰河003 | 28 | 1  | 
  10. | 4 | 冰河004 | 30 | 2  | 
  11. | 5 |    |   | 1  | 
  12. | 6 |    |   | 2  | 
  13. | 7 |    |   | 1  | 
  14. | 8 |    |   | 2  | 
  15. +----+--------+-----+-----+ 
  16. rows in set 

成功將數據更新到insert_one表的sex字段中。

本文轉載自微信公眾號「冰河技術」,可以通過以下二維碼關注。轉載本文請聯系冰河技術公眾號。

 

責任編輯:武曉燕 來源: 冰河技術
相關推薦

2022-11-17 12:09:51

2020-08-06 08:00:51

數據分頁優化

2021-02-02 21:50:31

MySQL 8.0ExcelMySQL 5.7

2009-07-07 18:08:26

Oracle收購Ubu紅帽對抗微軟

2010-11-23 13:51:55

MySQL數據表

2020-06-15 08:54:46

架構圖 EA業務建模

2011-07-28 17:02:59

MYSQL數據庫跨表更新數據并合

2017-07-06 12:01:52

MySQL數據安全

2021-02-07 09:01:10

Java并發編程

2011-07-29 14:39:11

CASE WHEN E

2019-09-11 10:12:12

華為

2009-08-25 14:18:13

C#如何連接數據庫

2013-12-16 10:59:52

WiFi上鎖WiFi被盜

2021-09-29 11:30:01

大數據技術架構

2010-09-26 16:39:27

SQL子查詢

2021-02-09 17:21:55

SQL數據庫存儲

2021-06-03 10:01:28

JDBCStatement接口

2017-07-18 10:14:23

OracleMerge into教程

2021-11-22 10:38:23

架構運維技術

2021-05-21 10:01:01

JDBCJavaStatement接口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区在线观看 | 一区二区三区在线看 | 亚洲九色| 人人人人爽 | 亚洲一区在线日韩在线深爱 | 国产精品久久国产精品 | av毛片| 黑人精品xxx一区一二区 | 欧美国产日韩精品 | 亚洲精品视频免费观看 | 亚洲网视频 | 欧产日产国产精品国产 | 国产在线精品一区二区三区 | 久久精品成人热国产成 | 欧美成年视频 | 国产精品久久久久久亚洲调教 | 免费国产黄网站在线观看视频 | 国产视频二区在线观看 | 天堂一区在线 | 国产一区二区三区在线 | 欧美久久精品一级c片 | 欧美亚洲激情 | 日韩视频免费看 | 国产一级大片 | 99亚洲精品 | 日韩欧美国产精品 | 日韩精品一区二区三区中文字幕 | 亚洲综合在线播放 | 久久久99精品免费观看 | 久久91av | 一区二区三区国产在线观看 | 成人欧美一区二区三区色青冈 | 久草免费在线 | 亚洲精品久久久一区二区三区 | 欧美激情综合 | 中文字幕国产精品 | www.欧美视频 | 狠狠综合网 | 国产精品一区二区三区四区五区 | 欧美精品久久久 | 国产成人网 |