SQL - 复制相同 table 但具有不同外键 ID 的行
SQL - Copying rows of the same table but with different foreign key ID
我有三个 table 是相互关联的:
Table #1 : 主要
ID_MAIN NAME_MAIN ID_VER
1 XYZ 1.0
2 PQR 1.0
3 ABC 1.0
SUBMAIN:列 ID_SUBMAIN(身份),NAME_SUBMAIN,ID_MAIN(带 MAIN 的外键),ID_VER (带 MAIN 的外键)
ID_SUBMAIN NAME_SUBMAIN ID_MAIN ID_VER
1 X 1 1.0
2 Y 1 1.0
3 Z 1 1.0
4 A 2 1.0
Table#3最后:
列 ID_LAST(身份),ID_SUBMAIN(带有 SUBMAIN 的外键)
ID_LAST ID_SUBMAIN
1 1
2 1
3 1
4 2
5 4
现在每当我用 ID_MAIN 作为 1 和 ID_VER 作为 2.0 创建一个新的 MAIN 行时,我想用新的 ID_MAIN 和 LAST 复制 SUBMAIN 的所有关联记录使用新的 ID_SUBMAIN.
MAIN 中的新记录
ID_MAIN NAME_MAIN ID-VER
1 XYZ 2.0
我正在使用插入查询复制 ID_MAIN = 1
的所有 SUBMAIN 记录
我的查询是这样的:
INSERT INTO SUBMAIN(NAME_SUBMAIN, ID_MAIN, ID_VER)
SELECT
NAME_SUBMAIN, ID_MAIN, '2.0'
WHERE
ID_MAIN = 1
SOBMAIN 的新记录将是:
ID_SUBMAIN NAME_SUBMAIN ID_MAIN ID_VER
5 X 1 2.0
6 Y 1 2.0
7 Z 1 2.0
现在我想复制 LAST table 的所有记录,其中 ID_SUBMAIN 是 1,2 和 3。将 ID_SUBMAIN 替换为新的 ID_SUBMAIN 5,6和 7.
LAST 中的新记录应如下所示:
ID_LAST ID_SUBMAIN
6 5
7 5
8 5
9 6
我被困在这里,因为我不知道该如何实现?
您正在寻找的 sql 脚本如下所示:
INSERT INTO LAST(ID_SUBDOMAIN)
SELECT Sub2.ID_SUBDOMAIN
FROM SUBMAIN AS SUB1
INNER JOIN LAST ON LAST.ID_SUBMAIN = SUB1.ID_SUBMAIN
INNER JOIN SUBMAIN AS SUB2 ON SUB2.NAME = SUB1.NAME
AND SUB2.ID_VER = '2.0'
这样,在第一个连接中,您将获得已在 "LAST" table 中引用的子干线,而在下一个内部连接中,您将获得具有相同名称和新内容的新子干线版本
我有三个 table 是相互关联的:
Table #1 : 主要
ID_MAIN NAME_MAIN ID_VER
1 XYZ 1.0
2 PQR 1.0
3 ABC 1.0
SUBMAIN:列 ID_SUBMAIN(身份),NAME_SUBMAIN,ID_MAIN(带 MAIN 的外键),ID_VER (带 MAIN 的外键)
ID_SUBMAIN NAME_SUBMAIN ID_MAIN ID_VER
1 X 1 1.0
2 Y 1 1.0
3 Z 1 1.0
4 A 2 1.0
Table#3最后:
列 ID_LAST(身份),ID_SUBMAIN(带有 SUBMAIN 的外键)
ID_LAST ID_SUBMAIN
1 1
2 1
3 1
4 2
5 4
现在每当我用 ID_MAIN 作为 1 和 ID_VER 作为 2.0 创建一个新的 MAIN 行时,我想用新的 ID_MAIN 和 LAST 复制 SUBMAIN 的所有关联记录使用新的 ID_SUBMAIN.
MAIN 中的新记录
ID_MAIN NAME_MAIN ID-VER
1 XYZ 2.0
我正在使用插入查询复制 ID_MAIN = 1
的所有 SUBMAIN 记录我的查询是这样的:
INSERT INTO SUBMAIN(NAME_SUBMAIN, ID_MAIN, ID_VER)
SELECT
NAME_SUBMAIN, ID_MAIN, '2.0'
WHERE
ID_MAIN = 1
SOBMAIN 的新记录将是:
ID_SUBMAIN NAME_SUBMAIN ID_MAIN ID_VER
5 X 1 2.0
6 Y 1 2.0
7 Z 1 2.0
现在我想复制 LAST table 的所有记录,其中 ID_SUBMAIN 是 1,2 和 3。将 ID_SUBMAIN 替换为新的 ID_SUBMAIN 5,6和 7.
LAST 中的新记录应如下所示:
ID_LAST ID_SUBMAIN
6 5
7 5
8 5
9 6
我被困在这里,因为我不知道该如何实现?
您正在寻找的 sql 脚本如下所示:
INSERT INTO LAST(ID_SUBDOMAIN)
SELECT Sub2.ID_SUBDOMAIN
FROM SUBMAIN AS SUB1
INNER JOIN LAST ON LAST.ID_SUBMAIN = SUB1.ID_SUBMAIN
INNER JOIN SUBMAIN AS SUB2 ON SUB2.NAME = SUB1.NAME
AND SUB2.ID_VER = '2.0'
这样,在第一个连接中,您将获得已在 "LAST" table 中引用的子干线,而在下一个内部连接中,您将获得具有相同名称和新内容的新子干线版本