SQL-复制同一表但具有不同外键ID的行

我有三个相互关联的表:

表#1:主要

ID_MAIN  NAME_MAIN  ID_VER
1        XYZ        1.0
2        PQR        1.0
3        ABC        1.0

SUBMAIN:列ID_SUBMAIN(identity),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

表#3最后:

列ID_LAST(identity),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的SUBMAIN关联记录和具有新ID_SUBMAIN的LAST.

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

因此SUBMAIN的新记录将是:

ID_SUBMAIN   NAME_SUBMAIN   ID_MAIN   ID_VER
5            X              1         2.0
6            Y              1         2.0
7            Z              1         2.0

现在,我想复制LAST表中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”表中已经引用的子主体,而在下一个内部联接中,您将获得具有相同名称和新版本的新主体.

转载注明原文:SQL-复制同一表但具有不同外键ID的行 - 代码日志