【SQL系列】多表關聯更新

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。
img

  • 推薦:kwan 的首頁,持續學習,不斷總結,共同進步,活到老學到老
  • 導航
    • 檀越劍指大廠系列:全面總結 java 核心技術,jvm,并發編程 redis,kafka,Spring,微服務等
    • 常用開發工具系列:常用的開發工具,IDEA,Mac,Alfred,Git,typora 等
    • 數據庫系列:詳細總結了常用數據庫 mysql 技術點,以及工作中遇到的 mysql 問題等
    • 新空間代碼工作室:提供各種軟件服務,承接各種畢業設計,畢業論文等
    • 懶人運維系列:總結好用的命令,解放雙手不香嗎?能用一個命令完成絕不用兩個操作
    • 數據結構與算法系列:總結數據結構和算法,不同類型針對性訓練,提升編程思維,劍指大廠

非常期待和您一起在這個小小的網絡世界里共同探索、學習和成長。💝💝💝 ?? 歡迎訂閱本專欄 ??

博客目錄

  • 深入解析 SQL 更新操作:從基礎語法到最佳實踐
    • 一、UPDATE 語句基礎解析
    • 二、表別名與列引用
    • 三、SET 子句詳解
    • 四、FROM 子句與多表更新
    • 五、WHERE 條件深度分析

深入解析 SQL 更新操作:從基礎語法到最佳實踐

SQL(結構化查詢語言)是數據庫管理的核心工具,而 UPDATE 語句作為其中最常用的操作之一,在數據維護和業務邏輯實現中扮演著關鍵角色。
在這里插入圖片描述

一、UPDATE 語句基礎解析

我們首先來看這個示例 SQL 語句:

UPDATE table_01 dst
SET tenant_id   = src."tenantId", "updatedAt" = CURRENT_TIMESTAMP(3)
FROM table_02 src
WHERE dst.user_id IS NOT NULLAND dst.user_id = src.uidAND dst.tenant_id IS DISTINCT FROM src."tenantId";

這是一個典型的基于多表關聯的更新操作,主要功能是將 table_01 中的 tenant_id 字段更新為 table_02 中對應記錄的"tenantId"值,同時更新修改時間戳。

UPDATE 語句的基本結構包含以下幾個關鍵部分:

  1. 目標表指定(table_01 dst)
  2. SET 子句定義要更新的列和新值
  3. FROM 子句指定數據來源表
  4. WHERE 子句定義更新條件

這種形式的 UPDATE 語句在 PostgreSQL、SQL Server 等數據庫中常見,但在 MySQL 中語法略有不同,通常使用 JOIN 替代 FROM。

二、表別名與列引用

示例中使用了表別名(dst 和 src),這是 SQL 中提高可讀性的重要技巧。通過為表指定簡短的別名,可以簡化列引用并減少語句長度。例如:

dst.user_id比完整的table_01.user_id更加簡潔明了。

值得注意的是,示例中出現了兩種不同風格的列名引用:

  • 不加引號的常規標識符(tenant_id, user_id)
  • 加引號的特殊標識符(“tenantId”, “updatedAt”)

這種差異通常反映了底層數據庫設計中的命名規范不一致問題。在 SQL 標準中,不加引號的標識符通常不區分大小寫,而加引號的標識符則保留原始大小寫。在實際項目中,建議統一命名風格以避免混淆。

三、SET 子句詳解

SET 子句定義了要更新的列及其新值。本例中有兩個更新操作:

  1. tenant_id = src."tenantId":將目標表的 tenant_id 設置為源表的 tenantId 值
  2. "updatedAt" = CURRENT_TIMESTAMP(3):將 updatedAt 字段設置為當前時間,精確到毫秒(3 位小數)

CURRENT_TIMESTAMP 函數在不同數據庫中的實現略有差異:

  • PostgreSQL 和 Oracle 支持精度參數(如(3)表示毫秒)
  • MySQL 也支持類似語法,但參數位置略有不同
  • SQL Server 使用 GETDATE()或 SYSDATETIME()

在實際應用中,記錄數據的最后修改時間是一種常見的最佳實踐,有助于數據審計和問題追蹤。

四、FROM 子句與多表更新

與傳統單表 UPDATE 不同,本例使用了 FROM 子句引入第二個表(table_02)作為數據來源。這種多表更新語法在以下場景特別有用:

  • 根據關聯表的值更新目標表
  • 需要從多個表獲取信息來決定更新值
  • 批量更新基于復雜條件的記錄

在 MySQL 中,等效操作通常使用 JOIN 語法:

UPDATE table_01 dst
JOIN table_02 src ON dst.user_id = src.uid
SET dst.tenant_id = src."tenantId", dst."updatedAt" = CURRENT_TIMESTAMP(3)
WHERE dst.user_id IS NOT NULLAND dst.tenant_id IS DISTINCT FROM src."tenantId";

五、WHERE 條件深度分析

WHERE 子句是 UPDATE 語句中最關鍵的部分之一,它決定了哪些記錄會被修改。本例中的條件包含三個部分:

  1. dst.user_id IS NOT NULL:確保只處理 user_id 不為空的記錄
  2. dst.user_id = src.uid:關聯條件,確保只更新匹配的記錄
  3. dst.tenant_id IS DISTINCT FROM src."tenantId":確保只更新實際需要修改的記錄

第三個條件特別值得關注,它使用了IS DISTINCT FROM操作符,這是一個比普通不等號(!=或<>)更安全的比較方式,因為它能正確處理 NULL 值:

  • 普通比較:NULL = NULL 結果是 NULL(不是 TRUE)
  • IS DISTINCT FROM:NULL IS DISTINCT FROM NULL 結果是 FALSE

這種寫法避免了不必要的更新,提高了語句效率,是 SQL 優化的重要技巧。

覺得有用的話點個贊 👍🏻 唄。
??????本人水平有限,如有紕漏,歡迎各位大佬評論批評指正!😄😄😄

💘💘💘如果覺得這篇文對你有幫助的話,也請給個點贊、收藏下吧,非常感謝!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且長,行則將至,讓我們一起加油吧!🌙🌙🌙

img

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

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

相關文章

C++進階學習:STL常用容器--map/multimap容器

1. map 容器基本概念 map 中所有元素都是 pair pair 中第一個元素為 key &#xff08;鍵值&#xff09; 起到索引運用 第二個元素為 value&#xff08;實值&#xff09; 所有元素都會根據元素的鍵值自動排序 本質&#xff1a; map/multimap 屬于關聯式容器 底層結構是用二…

let,const,var關鍵字的區別

let,const,var關鍵字 let&#xff0c;const&#xff0c;var都存在變量提升 它們都存在變量提升但是稍微有點不同 var變量聲明會被提升到作用域的頂部&#xff0c;并且會被初始化為 undefinedlet 和 const&#xff1a;變量聲明也會被提升到作用域的頂部&#xff0c;但不會被初…

Nuitka 已經不再安全? Nuitka/Cython 打包應用逆向工具 -- pymodhook

pymodhook是一個記錄任意對Python模塊的調用的庫&#xff0c;用于Python逆向分析。 pymodhook庫類似于Android的xposed框架&#xff0c;但不僅能記錄函數的調用參數和返回值&#xff0c;還能記錄模塊的類的任意方法調用&#xff0c;以及任意派生對象的訪問&#xff0c;基于pyob…

path環境變量滿了如何處理,分割 PATH 到 Path1 和 Path2

要正確設置 Path1 的值&#xff0c;你需要將現有的 PATH 環境變量 中的部分路徑復制到 Path1 和 Path2 中。以下是詳細步驟&#xff1a; 步驟 1&#xff1a;獲取當前 PATH 的值 打開環境變量窗口&#xff1a; 按 Win R&#xff0c;輸入 sysdm.cpl&#xff0c;點擊 確定。在 系…

SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理標準)-(一)

1 目的 物料(例如晶圓)加工在設備中的自動化管理與控制是實現工廠自動化的關鍵要素。本標準針對半導體制造環境中與設備內部物料處理相關的通信需求進行了規范。本標準規定了在加工單元接收到的指定材料所應適用的加工方法(例如Etch腔室需要Run哪支Recipe)。它闡述了物料加工的…

【Hadoop】集群搭建實戰:超詳細保姆級教程

&#x1f407;明明跟你說過&#xff1a;個人主頁 &#x1f3c5;個人專欄&#xff1a;《大數據前沿&#xff1a;技術與應用并進》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目錄 一、引言 1、Hadoop簡介 2、Hadoop集群概念 3、 Hadoop 集…

阿里云人工智能大模型通義千問Qwen3開發部署

本文主要描述阿里云人工智能大模型開源社區ModelScope提供的通義千問Qwen3開發部署。 與阿里云一起 輕松實現數智化 讓算力成為公共服務&#xff1a;用大規模的通用計算&#xff0c;幫助客戶做從前不能做的事情&#xff0c;做從前做不到的規模。讓數據成為生產資料&#xff1a;…

24.(vue3.x+vite)引入組件并動態掛載(mount)

示例截圖 組件代碼: <template><div><div>{{message }}</div>

《Python星球日記》 第56天:循環神經網絡(RNN)入門

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、序列數據的特點與挑戰1. 什么是序列數據?2. 序列數據的挑戰二、RNN 的基本結構與前向傳播1. RNN的核心理念2. RNN的數學表達3. RNN的前向傳…

手寫 vue 源碼 === computed 實現

目錄 計算屬性的基本概念 計算屬性的核心實現 ComputedRefImpl 類的實現 ReactiveEffect 與計算屬性的關系 計算屬性的工作流程 1. 創建計算屬性 2. 依賴收集過程 3. 嵌套 effect 的處理 4. 更新過程 嵌套 effect 關系圖解 依賴關系建立過程 代碼實現分析 1. 創建…

【Lattice FPGA 開發】Diamond在線調試Reveal邏輯亂跳的解決

在Vivado中在always塊中寫邏輯時如果出現always塊中的異步復位敏感詞在塊內部未使用的情況&#xff0c;如下例的rst&#xff1a; always (posedge clk or posedge rst) begin if(~tx_sense_flag)o_rd_adr < d1;else if((o_rd_adr d94) & (bit_cnt d7))o_rd_adr <…

【hadoop】Sqoop數據遷移工具的安裝部署

一、Sqoop安裝與配置 步驟&#xff1a; 1、使用XFTP將Sqoop安裝包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz發送到master機器的主目錄。 2、解壓安裝包&#xff1a; tar -zxvf ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 3、修改文件夾的名字&#xff0c;將其改為s…

BUUCTF——PYWebsite

BUUCTF——PYWebsite 進入靶場 看看基本信息 沒有什么信息 掃個目錄看看 http://node5.buuoj.cn:28115/.DS_Store http://node5.buuoj.cn:28115/flag.php http://node5.buuoj.cn:28115/index.html訪問flag.php 提示保存購買者的IP 抓包看看 直接XFF偽造一下 X-Forwarded-F…

基于Qt開發的多線程TCP服務端

目錄 一、Qt TCP服務端開發環境準備1. 項目配置2. 核心類說明二、服務端搭建步驟詳解步驟1:初始化服務端對象步驟2:啟動端口監聽步驟3:處理客戶端連接三、數據通信與狀態管理1. 數據收發實現2. 客戶端狀態監控四、進階功能擴展1. 多客戶端并發處理2. 心跳檢測機制五、調試與…

【Tools】VScode使用CMake構建項目

這里寫目錄標題 vscode 使用 CMake**安裝插件**新建CMake項目 vscode 使用 CMake 安裝插件 CMake和CMake Tools c等等 CMake插件主要功能是CMake語法高亮、自動補全CMake Tools的功能主要是結合VSCode IDE使用CMake這個工具&#xff0c;比如生成CMake項目、構建CMake項目等…

neo4j圖數據庫基本概念和向量使用

一.節點 1.新建節點 create (n:GroupProduct {name:都邦高保額團意險,description: "保險產品名稱"} ) return n CREATE&#xff1a;Neo4j 的關鍵字&#xff0c;用于創建新節點或關系。 (n:GroupProduct)&#xff1a; n 是節點的臨時別名&#xff08;變量名&#…

2025年滲透測試面試題總結-滲透測試紅隊面試八(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 滲透測試紅隊面試八 二百一十一、常見中間件解析漏洞利用方式 二百一十二、MySQL用戶密碼存儲與加密 …

大語言模型主流架構解析:從 Transformer 到 GPT、BERT

&#x1f4cc; 友情提示&#xff1a; 本文內容由銀河易創AI&#xff08;https://ai.eaigx.com&#xff09;創作平臺的gpt-4-turbo模型生成&#xff0c;旨在提供技術參考與靈感啟發。文中觀點或代碼示例需結合實際情況驗證&#xff0c;建議讀者通過官方文檔或實踐進一步確認其準…

Java設計模式之裝飾器模式:從基礎到高級的全面解析(萬字解析)

裝飾器模式(Decorator Pattern)是一種結構型設計模式,它允許向一個現有的對象添加新的功能,同時又不改變其結構。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。 一、裝飾器模式基礎概念 1.1 什么是裝飾器模式 裝飾…

RN 鴻蒙混合開發實踐(踩坑)

#三方框架# #React Native # 1 。環境配置&#xff1b; 安裝 DevEco 開發工具&#xff1b; Node 版本16&#xff1b; hdc環境配置 hdc 是 OpenHarmony 為開發人員提供的用于調試的命令行工具&#xff0c;鴻蒙 React Native 工程使用 hdc 進行真機調試。hdc 工具通過 OpenHa…