自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL如何實(shí)現(xiàn)查詢(xún)數(shù)據(jù)并根據(jù)條件更新到另一張表?

數(shù)據(jù)庫(kù) MySQL
作者個(gè)人研發(fā)的在高并發(fā)場(chǎng)景下,提供的簡(jiǎn)單、穩(wěn)定、可擴(kuò)展的延遲消息隊(duì)列框架,具有精準(zhǔn)的定時(shí)任務(wù)和延遲隊(duì)列處理功能。

[[352779]]

作者個(gè)人研發(fā)的在高并發(fā)場(chǎng)景下,提供的簡(jiǎn)單、穩(wěn)定、可擴(kuò)展的延遲消息隊(duì)列框架,具有精準(zhǔn)的定時(shí)任務(wù)和延遲隊(duì)列處理功能。自開(kāi)源半年多以來(lái),已成功為十幾家中小型企業(yè)提供了精準(zhǔn)定時(shí)調(diào)度方案,經(jīng)受住了生產(chǎn)環(huán)境的考驗(yàn)。為使更多童鞋受益,現(xiàn)給出開(kāi)源框架地址:https://github.com/sunshinelyz/mykit-delay

數(shù)據(jù)案例

原本的數(shù)據(jù)庫(kù)有3張表。

  • t_user :用戶(hù)表,存放用戶(hù)的基本信息。
  • t_role :角色表,存放角色信息。
  • t_role_user:存放角色與用戶(hù)的對(duì)應(yīng)關(guān)系。

因?yàn)闃I(yè)務(wù)邏輯的改變,現(xiàn)在要把它們合并為一張表,把t_role中的角色信息插入到t_user中。

首先獲取到所有用戶(hù)對(duì)應(yīng)的角色,以用戶(hù)ID分組,合并角色地到一行,以逗號(hào)分隔。

  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 

先把查到的數(shù)據(jù)存放到了一個(gè)新建的表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表的數(shù)據(jù)更新到t_user里,因?yàn)槭歉拢圆荒苡胕nsert into select from 語(yǔ)句了

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

成功將目的地以逗號(hào)分隔的字符串形式導(dǎo)入t_user表中

說(shuō)一下用到的幾個(gè)方法,group_concat

group_concat( [DISTINCT] 要連接的字段 [Order BY 排序字段 ASC/DESC] [Separator '分隔符'] ),該函數(shù)能夠?qū)⑾嗤男薪M合起來(lái)

  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字段的值在同一行打印出來(lái),逗號(hào)分隔(默認(rèn))

  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字段去重打印在一行,逗號(hào)分隔

  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字段的值打印在一行,逗號(hào)分隔,按照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 將查詢(xún)到的記錄插入到某個(gè)表中

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

要求目標(biāo)db2必須存在,下面測(cè)試一下,有兩個(gè)表,結(jié)構(gòu)如下

  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中查找性別數(shù)據(jù),插入到表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 

結(jié)果很尷尬,我是想要更新這張表的sex字段,而不是插入新的數(shù)據(jù),那么這個(gè)命令只適用于要把數(shù)據(jù)導(dǎo)入空表中,所以在上面的實(shí)際需要中,我建立了新表mid,利用update來(lái)中轉(zhuǎn)并更新數(shù)據(jù)

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

根據(jù)條件匹配,把表1的數(shù)據(jù)替換為(更新為)表2的數(shù)據(jù),表1和表2必須有關(guān)聯(lián)才可以

  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 

成功將數(shù)據(jù)更新到insert_one表的sex字段中。

本文轉(zhuǎn)載自微信公眾號(hào)「冰河技術(shù)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系冰河技術(shù)公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 冰河技術(shù)
相關(guān)推薦

2022-11-17 12:09:51

2020-08-06 08:00:51

數(shù)據(jù)分頁(yè)優(yōu)化

2021-02-02 21:50:31

MySQL 8.0ExcelMySQL 5.7

2010-11-23 13:51:55

MySQL數(shù)據(jù)表

2009-07-07 18:08:26

Oracle收購(gòu)Ubu紅帽對(duì)抗微軟

2011-07-28 17:02:59

MYSQL數(shù)據(jù)庫(kù)跨表更新數(shù)據(jù)并合

2020-06-15 08:54:46

架構(gòu)圖 EA業(yè)務(wù)建模

2011-07-29 14:39:11

CASE WHEN E

2009-08-25 14:18:13

C#如何連接數(shù)據(jù)庫(kù)

2017-07-06 12:01:52

MySQL數(shù)據(jù)安全

2021-02-07 09:01:10

Java并發(fā)編程

2010-09-26 16:39:27

SQL子查詢(xún)

2019-09-11 10:12:12

華為

2013-12-16 10:59:52

WiFi上鎖WiFi被盜

2021-09-29 11:30:01

大數(shù)據(jù)技術(shù)架構(gòu)

2021-02-09 17:21:55

SQL數(shù)據(jù)庫(kù)存儲(chǔ)

2021-06-03 10:01:28

JDBCStatement接口

2021-05-21 10:01:01

JDBCJavaStatement接口

2017-07-18 10:14:23

OracleMerge into教程

2021-11-22 10:38:23

架構(gòu)運(yùn)維技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)