MySQL 中 UPDATE 結合 SELECT 和 UPDATE CASE WHEN 的示例

概述

  • 以下是 MySQL 中 UPDATE 結合 SELECTUPDATE CASE WHEN 的示例:

一、UPDATE 結合 SELECT(跨表更新)

場景:根據 orders 表中的訂單總金額,更新 users 表中用戶的 total_spent 字段。

-- 創建測試表
CREATE TABLE users (user_id INT PRIMARY KEY,username VARCHAR(50),total_spent DECIMAL(10,2)
);CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,amount DECIMAL(10,2)
);-- 插入測試數據
INSERT INTO users VALUES (1, 'Alice', 0), (2, 'Bob', 0);
INSERT INTO orders VALUES (100, 1, 50), (101, 1, 30), (102, 2, 80);-- 更新 users.total_spent,統計每個用戶的訂單總金額
UPDATE users u
JOIN (SELECT user_id, SUM(amount) AS totalFROM ordersGROUP BY user_id
) o ON u.user_id = o.user_id
SET u.total_spent = o.total;-- 結果:Alice 的 total_spent 變為 80,Bob 的變為 80

二、UPDATE CASE WHEN(條件更新)

場景:根據 salary 字段的值,調整 employees 表中的工資:
? 工資 < 5000 的漲 10%

? 5000 ≤ 工資 ≤ 10000 的漲 5%

? 工資 > 10000 的不變

-- 創建測試表
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),salary DECIMAL(10,2)
);-- 插入測試數據
INSERT INTO employees VALUES (1, 'John', 4000), (2, 'Jane', 6000), (3, 'Mike', 12000);-- 使用 CASE WHEN 更新工資
UPDATE employees
SET salary = CASEWHEN salary < 5000 THEN salary * 1.10WHEN salary BETWEEN 5000 AND 10000 THEN salary * 1.05ELSE salary
END;-- 結果:
-- John: 4000 → 4400
-- Jane: 6000 → 6300
-- Mike: 12000 → 不變

三、UPDATE 結合子查詢(單表條件更新)

場景:將 products 表中庫存量(stock)低于 100 的商品的 status 標記為 ‘缺貨’。

-- 創建測試表
CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(50),stock INT,status VARCHAR(20)
);-- 插入測試數據
INSERT INTO products VALUES (1, 'Pen', 200, '正常'), (2, 'Book', 50, '正常'), (3, 'Ruler', 99, '正常');-- 使用子查詢和 CASE WHEN 更新狀態
UPDATE products
SET status = CASEWHEN stock < 100 THEN '缺貨'ELSE '正常'
END;-- 結果:
-- Pen: stock=200 → 狀態保持 '正常'
-- Book: stock=50 → 狀態變為 '缺貨'
-- Ruler: stock=99 → 狀態變為 '缺貨'

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79573.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MCP】魔搭社區MCP服務(高德地圖、everything文件搜索)

【MCP】魔搭社區MCP服務&#xff08;高德地圖、everything文件搜索&#xff09; 1、上手使用2、環境配置&#xff08;1&#xff09;cherry-studio配置&#xff08;2&#xff09;添加魔搭大模型服務&#xff08;如果已經設置了其他大模型服務&#xff0c;可跳過&#xff09;&…

MapReduce 的工作原理

MapReduce 是一種分布式計算框架&#xff0c;用于處理和生成大規模數據集。它將任務分為兩個主要階段&#xff1a;Map 階段和 Reduce 階段。開發人員可以使用存儲在 HDFS 中的數據&#xff0c;編寫 Hadoop 的 MapReduce 任務&#xff0c;從而實現并行處理1。 MapReduce 的工作…

MCU開啟浮點計算FPU

FPU 測試 1. FPU 簡介2. 協處理器控制寄存器&#xff08;CPACR&#xff09;3. 開啟FPU4. 驗證FPU&#xff08;Julia 分形實驗&#xff09; 1. FPU 簡介 FPU 即浮點運算單元&#xff08;Float Point Unit&#xff09;。浮點運算&#xff0c;對于定點 CPU&#xff08;沒有 FPU 的…

進程相關面試題20道

一、基礎概念與原理 1.進程的定義及其與程序的本質區別是什么&#xff1f; 答案&#xff1a;進程是操作系統分配資源的基本單位&#xff0c;是程序在數據集合上的一次動態執行過程。核心區別&#xff1a;? 動態性&#xff1a;程序是靜態文件&#xff0c;進程是動態執行實例…

React Hooks 精要:從入門到精通的進階之路

Hooks 是 React 16.8 引入的革命性特性,它讓函數組件擁有了類組件的能力。以下是 React Hooks 的詳細使用指南。 一、基礎 Hooks 1. useState - 狀態管理 import { useState } from react;function Counter() {const [count, setCount] = useState(0); // 初始值為0return …

springboot3+vue3融合項目實戰-大事件文章管理系統-更新用戶頭像

大致分為三步 首先在usercontroller里面加入方法 PatchMapping ("/updateAvatar")public Result upadateAvatar(RequestParam URL String avatarUrl){userService.updateAvater(avatarUrl);return Result.success();}url注解能驗證傳入的url是不是合法的&#xff0c…

Mosaic數據增強技術

Mosaic 數據增強技術是一種在計算機視覺領域廣泛應用的數據增強方法。下面是Mosaic 數據增強技術原理的詳細介紹 一、原理 Mosaic 數據增強是將多張圖像&#xff08;通常是 4 張&#xff09;按照一定的規則拼接在一起&#xff0c;形成一張新的圖像。在拼接過程中&#xff0c;會…

Git安裝教程及常用命令

1. 安裝 Git Bash 下載 Git 安裝包 首先&#xff0c;訪問 Git 官方網站 下載適用于 Windows 的 Git 安裝包。 安裝步驟 啟動安裝程序&#xff1a;雙擊下載的 .exe 文件&#xff0c;啟動安裝程序。選擇安裝選項&#xff1a; 安裝路徑&#xff1a;可以選擇默認路徑&#xff0…

學習日志04 java

PTA上的練習復盤 java01 編程題作業感悟&#xff1a; 可以用ai指導自己怎么調試&#xff0c;但是不要把調代碼這過程里面的精華交給ai&#xff0c;就是自己去修正錯誤不能讓ai代勞&#xff01;~~~ 1 scanner.close() Scanner *** new Scanner(System.in); ***.close(); …

AI 在模仿歷史語言方面面臨挑戰:大型語言模型在生成歷史風格文本時的困境與研究進展

概述 在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;技術在諸多領域展現出了強大的能力&#xff0c;但在處理歷史語言這一特定任務時&#xff0c;卻遭遇了不小的挑戰。美國和加拿大的研究人員通過合作發現&#xff0c;像 ChatGPT 這樣的大型語言模型&#x…

基于 Spring Boot 瑞吉外賣系統開發(十二)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;十二&#xff09; 菜品刪除 單擊“批量刪除”和“刪除”時&#xff0c;會攜帶需要刪除的菜品的id以delete請求方式向“/dish”發送請求。 URLhttp://127.0.0.1:8080/dish調用方法DELETE參數ids DishController添加刪除方法 …

Day22打卡-復習

復習日 仔細回顧一下之前21天的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 泰坦尼克號人員生還預測https://www.kaggle.com/competitions/titanic/overview K…

L48.【LeetCode題解】904. 水果成籃

目錄 1.題目 2.分析 方法1:暴力枚舉 方法2:暴力解法的優化:滑動窗口 代碼 方法3:優化方法2:使用數組充當哈希表 方法4:四個變量分別充當籃子和籃子中水果的個數(最快!!!) 代碼 容易忽略的點 1.題目 https://leetcode.cn/problems/fruit-into-baskets/ 你正在探訪一家農…

Leetcode-BFS問題

LeetCode-BFS問題 1.Floodfill問題 1.圖像渲染問題 [https://leetcode.cn/problems/flood-fill/description/](https://leetcode.cn/problems/flood-fill/description/) class Solution {public int[][] floodFill(int[][] image, int sr, int sc, int color) {//可以借助另一…

Typora+PicGo+Gitee圖床配置教程 自動圖片上傳

配置步驟 #mermaid-svg-aPUbWs43XR5Rh7vf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-icon{fill:#552222;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-text{fill:#552222;stroke:#552222;}#…

養生:開啟健康生活的全新篇章

養生是一場關乎生活品質與身心健康的持續修行&#xff0c;從飲食調養到運動鍛煉&#xff0c;從睡眠管理到心態塑造&#xff0c;每個環節都對健康有著深遠影響。以下為你提供全面且實用的養生指南。 飲食養生&#xff1a;科學膳食&#xff0c;滋養生命 合理的飲食是養生的根基…

Python | 赤道頻散關系圖

寫在前面 寫開題報告&#xff0c; 想用個圖發現截出來全是糊的。索性自己畫了&#xff0c;主要實現的Matsuno&#xff08;1966&#xff09;的赤道波動頻散關系圖。但是&#xff0c;實在是沒有審美&#xff0c;其他文獻里都是黑色&#xff0c;這里非要用個紫色&#xff0c;因為…

Nexus 私有倉庫 + Nginx 反向代理部署文檔

1. 使用 Podman 部署 Nexus 3 podman run --name nexus -d \-p 8081:8081 \-v /data:/nexus-data \-v /etc/localtime:/etc/localtime \-e TZ"Asia/Shanghai" \-e INSTALL4J_ADD_VM_PARAMS"-Xms10240m -Xmx10240m -XX:MaxDirectMemorySize4096m" \docker.…

一.Gitee基本操作

一.初始化 1.git init初始化倉庫 git init 用于在當前目錄下初始化一個本地 Git 倉庫&#xff0c;讓這個目錄開始被 Git 跟蹤和管理。 生成 .git 元數據目錄&#xff0c;從而可以開始進行提交、回退、分支管理等操作。 2.git config user.name/user.email配置本地倉庫 # 設置…

力扣210(拓撲排序)

210. 課程表 II - 力扣&#xff08;LeetCode&#xff09; 這是一道拓撲排序的模板題。簡單來說&#xff0c;給出一個有向圖&#xff0c;把這個有向圖轉成線性的排序就叫拓撲排序。如果有向圖中有環就沒有辦法進行拓撲排序了。因此&#xff0c;拓撲排序也是圖論中判斷有向無環圖…