【问题标题】:How to do a SQL SELECT query with a JOIN that doesn't use the key?如何使用不使用键的 JOIN 执行 SQL SELECT 查询?
【发布时间】:2015-06-15 05:49:56
【问题描述】:

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

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 查询中执行此操作。

有没有办法做到这一点?

【问题讨论】:

    标签: mysql sql database database-migration


    【解决方案1】:

    首先,不要求使用键进行连接。当然,这通常是它们的完成方式,但您可以加入任何事物(这是关系数据库的一大优点)。

    只需使用属性列将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2021-01-04
      相关资源
      最近更新 更多