如何使用不使用密钥的 JOIN 进行 SQL SELECT 查询?
How to do a SQL SELECT query with a JOIN that doesn't use the key?
我改变了数据库的设计,假设旧的设计是这样的:
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也是一样,整个table.
没有重复
我想要做的是一个 SQL 查询,它将 tableC 的所有值插入 tableCNew。
因此,对于 tableC 的每一行,我需要找到 atrA1 和 atrA2 的 keyA 以及 atrB1 的 keyB,然后将获得的 keyA 和 keyB 与旧值一起插入atrC1 和 atrC2 进入 tableCNew。另外,我想在单个 SQL 查询中执行此操作。
有办法吗?
首先,不要求使用键进行连接。当然,这通常是他们完成的方式,但您可以加入任何东西(这是关系数据库的一大优点)。
只需使用属性列将表 C 连接到其他两个表即可创建您的插入数据:
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
我改变了数据库的设计,假设旧的设计是这样的:
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也是一样,整个table.
没有重复我想要做的是一个 SQL 查询,它将 tableC 的所有值插入 tableCNew。
因此,对于 tableC 的每一行,我需要找到 atrA1 和 atrA2 的 keyA 以及 atrB1 的 keyB,然后将获得的 keyA 和 keyB 与旧值一起插入atrC1 和 atrC2 进入 tableCNew。另外,我想在单个 SQL 查询中执行此操作。
有办法吗?
首先,不要求使用键进行连接。当然,这通常是他们完成的方式,但您可以加入任何东西(这是关系数据库的一大优点)。
只需使用属性列将表 C 连接到其他两个表即可创建您的插入数据:
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