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

时间:2015-09-20 09:36:30

标签: sql sql-server insert foreign-keys

我有三个相互关联的表:

表#1: MAIN

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

表#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复制SUBMAIN的所有相关记录,并使用新ID_SUBMAIN复制LAST。

MAIN中的新记录

ID_MAIN  NAME_MAIN  ID-VER
1        XYZ        2.0

我使用Insert查询复制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 5,6和7替换ID_SUBMAIN。

LAST中的新记录应如下所示:

ID_LAST   ID_SUBMAIN
6         5
7         5
8         5
9         6

我被困在这里,因为我无法弄清楚如何实现这一目标?

1 个答案:

答案 0 :(得分:3)

您正在寻找的sql脚本如下所示:

@IBAction func loginButton(sender: UIButton) {
    let emailAddress = emailTextField.text
    let password = passwordTextField.text

    let api = Api()
    api.authenticate(emailAddress!, password: password!)
}

这样,在第一次加入时,您将获得已经在" LAST"中引用的子域。表和下一个内部联接,您将获得具有相同名称和新版本的新联接