arm*_*men 6 sql sql-server sql-server-2012
我有以下 3 个相关表
Schools Departments Classes
--------------- ------------------ -----------------
ID ID ID
School_Name ID_Schools ID_Departments
Department_Name Class_Name
Run Code Online (Sandbox Code Playgroud)
和一些关于它们包含的内容的样本(我会尽可能地画出来)
---- Schools ---
ID School_Name
----------------
1 School_1 <----------------------\
2 School_2 |
n ........ |
|
---- Departments ---------------- |
ID ID_Schools Department_Name |
--------------------------------- |
1 1 Dept_1 <-----------/ -->--\
2 1 Dept_2 <-----------/ -->--|------\
3 2 Dept_1 | |
n .. ...... | |
| |
---- Classes ------------------- | |
ID ID_Departments Class_Name | |
-------------------------------- | |
1 1 Class_1 <-------------/ |
2 1 Class_2 <-------------/ |
3 1 Class_3 <-------------/ |
4 2 Class_1 <--------------------/
n .. .......
Run Code Online (Sandbox Code Playgroud)
所有 ID 都是自动递增的
我正在寻找一种复制“School_1”层次结构的方法。问题是我如何保持新行之间的关系?
例如,要复制“School_1”层次结构,我将在 Schools 表中插入一个新的原始数据,最终会生成一个新 ID(例如 5)。
---- Schools ---
ID School_Name
----------------
5 School_1
Run Code Online (Sandbox Code Playgroud)
属于“School_1”的部门“Dept_1”和“Dept_2”将获得新的 ID
---- Departments ----------------
ID ID_Schools Department_Name
---------------------------------
16 5 Dept_1
17 5 Dept_2
Run Code Online (Sandbox Code Playgroud)
并且课程也将获得新的 ID
---- Classes -------------------
ID ID_Departments Class_Name
--------------------------------
56 16 Class_1
57 16 Class_2
58 16 Class_3
59 17 Class_1
Run Code Online (Sandbox Code Playgroud)
我怎样才能以一种简单而聪明的方式实现这一目标?
我建议使用 SQLINSERT AS SELECT魔法,如下所述:Insert into...values (SELECT...FROM...)。
假设您的旧学校 ID 为 7,新学校 ID 为 17,那么您可以为每个表创建一个查询,如下所示INSERT INTO Departments(id, id_schools, name) VALUES (NULL, 17, (SELECT name FROM Departments WHERE id_schools = 17))。
当您需要按部门(具有多个部门)插入班级时,它会变得有点棘手,但您可以手动填写WHERE id_departments IN (5,6,13, etc)或自动填写WHERE id_departments IN (SELECT id FROM Departments WHERE School_ID = 17)
PS:这更像是建议,而不是答案,因此一些细节(例如 SQL 方言或代码质量)可能不合适,但我对方法本身很确定。
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |