我改变了数据库的设计,假设旧的设计是这样的:

tableA (keyA, atrA1, atrA2, atrA3)
tableB (keyB, atrB1)
tableC (keyC, atrA1, atrA2, atrB1, atrC1, atrC2)

新的设计是:
tableA (keyA, atrA1, atrA2, atrA3)
tableB (keyB, atrB1)
tableCNew (keyC, keyA(Foreign Key), keyB(Foreign Key), atrC1, atrC2)

为了清楚起见,保证atra1和atra2的每个组合都有一个惟一的keya(我的意思是,数据库中没有重复的值)。ATRB1也是如此,整个表中没有重复项。
我要做的是一个sql查询,它将tablec的所有值插入tablecnew。
所以,对于每一行tablec,我需要找到atra1和atra2的keya和atrb1的keyb,然后将获得的keya和keyb以及atrc1和atrc2的旧值插入tablecnew。另外,我想在一个sql查询中完成这项工作。
有办法吗?

最佳答案

首先,不要求使用键进行连接。当然,通常都是这样做的,但是您可以加入任何东西(这是关系数据库的一大优点)。
只需使用属性列将tablec连接到其他两个表,即可创建插入数据:

insert into tableNew
select keyC, keyA, keyB, atrC1, atrC2
from tableC c
join tableA a on a.atrA1 = c.atrA1 and a.atrA2 = c.atrA2
join tableB b on b.atrB1 = c.atrB1

09-07 08:44