mysql - 如何使用不使用键的 JOIN 执行 SQL SELECT 查询?

标签 mysql sql database database-migration

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

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同理,全表无重复。

我想做的是将 tableC 的所有值插入 tableCNew 的 SQL 查询。

因此,对于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

关于mysql - 如何使用不使用键的 JOIN 执行 SQL SELECT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545684/

相关文章:

sql - 如何将两个表合并在一起,选择具有较高值的​​列,而无法使用 MERGE 语句?

c# - 在 C# 中执行包含 SOURCE 调用的 SQL 脚本

SQL获取不同行的时间

php - MySQL UNION 不返回任何结果

mysql - 在 MySQL 中创建触发器时,除了 FOR EACH ROW 之外还有其他选择吗?

sql - 将ip插入mysql

sql - 使用别名与不使用 HAVING 之间是否存在性能差异

php - 如何将字符 "&"插入 MySQL 数据库?

mysql - TCPConnectWrap.afterConnect - Node 在 docker compose 中时无法从 mysql 获取数据

database - 如何使用自定义函数作为 PostgreSQL 表中的列默认值