ホームページ > データベース > mysql チュートリアル > 正しいマッピングを使用して親テーブルと子テーブルにデータを効率的に挿入するにはどうすればよいですか?

正しいマッピングを使用して親テーブルと子テーブルにデータを効率的に挿入するにはどうすればよいですか?

DDD
リリース: 2025-01-14 19:26:45
オリジナル
512 人が閲覧しました

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

親子テーブルにデータを挿入します

この例の目的は、受信 UDT (@tEmployeeData) から複数のテーブルにデータを挿入し、親レコードと子レコード間の正しいマッピングを確保することです。

マッピングの問題の解決

必要なマッピングを確立するには、一時的なemployeeId列をUDTに追加し、連続値を入力します。さらに、テーブル変数 (@EmployeeidMap) を作成して、UDT 内の一時的な従業員 ID をターゲット テーブルで生成された実際の従業員 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 を結合して実際の従業員 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート