共計 2591 個字符,預計需要花費 7 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
本文實例講述了 mysql 實現查詢數據并根據條件更新到另一張表的方法。分享給大家供大家參考,具體如下:
原本的數據庫有 3 張表
travel_way:旅游線路表,存放線路的具體信息
traveltag:線路標簽表,存放線路目的地等信息
tagrelation:標簽對應表,存放線路和目的地的對應關系
因為業務邏輯的改變,現在要把它們合并為一張表,把 traveltag 中的目的地信息插入到 travel_way 中。
首先獲取到所有線路對應的目的地,以線路 ID 分組,合并目的地到一行,以逗號分隔。
復制代碼 代碼如下:SELECT travel_way.id,GROUP_CONCAT(traveltag.content) FROM travel_way LEFT JOIN tagrelation on travel_way.id = tagrelation.travel_id LEFT JOIN traveltag ON tagrelation.tag_id = traveltag.id GROUP BY travel_way.id
先把查到的數據存放到了一個新建的表 mid 里
復制代碼 代碼如下:INSERT into mid (travelway_id,destination) SELECT travel_way.id,GROUP_CONCAT(traveltag.content) FROM travel_way LEFT JOIN tagrelation on travel_way.id = tagrelation.travel_id LEFT JOIN traveltag ON tagrelation.tag_id = traveltag.id GROUP BY travel_way.id
然后將 mid 表的數據更新到 travel_way 里,因為是更新,所以不能用 insert into select from 語句了
復制代碼 代碼如下:update travel_way,mid set travel_way.destination = mid.destination where travel_way.id = mid.travelway_id
成功將目的地以逗號分隔的字符串形式導入 travel_way 表中
說一下用到的幾個方法,group_concat
group_concat([DISTINCT] 要連接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘ 分隔符 ’] ), 該函數能夠將相同的行組合起來
select id,group_concat(distinct price) from goods group by id;
+——+—————————–+
| id| group_concat(distinct price) |
+——+—————————–+
|1 | 10,20|
|2 | 20 |
|3 | 200,500 |
+——+—————————–+
3 rows in set (0.00 sec)
以 id 分組,把 price 字段的值打印在一行,逗號分隔,按照 price 倒序排列
select id,group_concat(price order by price desc) from goods group by id;
+------+---------------------------------------+
| id| group_concat(price order by price desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
insert into select from 將查詢到的記錄插入到某個表中,
INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name
要求目標 db2 必須存在,下面測試一下,有兩個表,結構如下
select * from insert_one;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | 田小斯 | 25 | |
| 2 | 劉大牛 | 26 | |
| 3 | 鄭大錘 | 28 | |
| 4 | 胡二狗 | 30 | |
+----+--------+-----+-----+
4 rows in set
結果很尷尬,我是想要更新這張表的 sex 字段,而不是插入新的數據,那么這個命令只適用于要把數據導入空表中,所以在上面的實際需要中,我建立了新表 mid,利用 update 來中轉并更新數據
復制代碼 代碼如下:UPDATE tb1,tb2 SET tb1.address=tb2.address WHERE tb1.name=tb2.name
根據條件匹配,把表 1 的數據替換為(更新為)表 2 的數據,表 1 和表 2 必須有關聯才可以
update insert_one,insert_sex set insert_one.sex = insert_sex.sex where insert_one.id = insert_sex.id;
Query OK, 4 rows affected
select * from insert_one;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | 田小斯 | 25 | 1 |
| 2 | 劉大牛 | 26 | 2 |
| 3 | 鄭大錘 | 28 | 1 |
| 4 | 胡二狗 | 30 | 2 |
| 5 | | | 1 |
| 6 | | | 2 |
| 7 | | | 1 |
| 8 | | | 2 |
+----+--------+-----+-----+
8 rows in set
成功將數據更新到 insert_one 表的 sex 字段中。
更多關于 MySQL 相關內容感興趣的讀者可查看本站專題:《MySQL 常用函數大匯總》、《MySQL 日志操作技巧大全》、《MySQL 事務操作技巧匯總》、《MySQL 存儲過程技巧大全》及《MySQL 數據庫鎖相關技巧匯總》
希望本文所述對大家 MySQL 數據庫計有所幫助。
向 AI 問一下細節
丸趣 TV 網 - 提供最優質的資源集合!