首頁 > 資料庫 > mysql教程 > 如何有效率地將資料插入父子表並正確映射?

如何有效率地將資料插入父子表並正確映射?

DDD
發布: 2025-01-14 19:26:45
原創
512 人瀏覽過

How to Efficiently Insert Data into Parent and Child Tables with Correct Mapping?

在父子表中插入資料

本範例的目標是從傳入的 UDT (@tEmployeeData) 插入資料到多個表中,確保父子記錄之間的正確對應。

解決映射問題

為了建立必要的映射,我們在 UDT 中新增一個臨時 employeeId 列,並用連續值填充。此外,我們建立一個表變數 (@EmployeeidMap) 來對應 UDT 中的暫存 employee ID 與目標表中產生的實際 employee ID。

填入主表

我們利用 MERGE 來填入 @MainEmployee 表,使用插入資料和來源資料的值。這允許我們捕獲生成的 EmployeeID 值並同時填入映射表。

<code class="language-sql">MERGE INTO @MainEmployee USING @tEmployeeData AS sourceData ON 1 = 0
WHEN NOT MATCHED THEN
INSERT (FirstName, LastName)
VALUES (sourceData.FirstName, sourceData.LastName)
OUTPUT sourceData.EmployeeId, inserted.EmployeeID 
INTO @EmployeeidMap (temp_id, id);</code>
登入後複製

映射和插入到父子表

然後,我們將 @tEmployeeData 與 @EmployeeidMap 連接以取得實際的 employee ID,我們用它來填入 @ParentEmployeeDepartment 表。類似地,我們將 @ParentEmployeeDepartment 與 @tEmployeeData 連接以將父 ID 映射到子數據,並將數據插入到 @ChildEmployeeDepartmentTypeA 和 @ChildEmployeeDepartmentTypeB 中。

測試插入

為了驗證映射是否成功,我們執行一個查詢,將 UDT 資料與映射和目標表連接。

<code class="language-sql">SELECT FirstName,
     LastName,
     SentData.DepartmentType As [部门类型],
     DepartmentBuilding As 建筑物,
     DepartmentEmployeeLevel As [员工级别],
     DepartmentTypeAMetadata As [A 元数据],
     DepartmentTypeBMetadata As [B 元数据],
     SentData.EmployeeId As 临时ID, EmpMap.id As [员工ID], DeptMap.ParentEmployeeDepartmentID As [部门ID]
FROM @tEmployeeData SentData
INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id 
INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID</code>
登入後複製

這種方法確保子資料與其各自的父記錄正確映射,同時透過避免不必要的逐行操作來優化效能。

以上是如何有效率地將資料插入父子表並正確映射?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板