将带有外键的列中的数据替换为其他表中的相同数据

时间:2013-02-01 15:50:31

标签: sql foreign-keys

希望你们能帮助我弄清楚如何做一些我之前没有遇到的事情。

我有一个表,称之为TableA,有很多列。其中一个是“州”,条目如下:

state
'MA'
'NJ'
'HI'

等等。我想创建某种方法将这些值拉出到一个新的外键表中,称之为StateTable,它将具有列state_key和state。

例如,以下是我设想逐行进行的方式:

第1行:TableA中“state”列中的值为“MA”。检查StateTable是否有一个“state”列为“MA”的条目。如果是这样,获取该行的state_key,并用外键替换TableA中的条目,以便该行现在具有FK到'MA'而不是直接存储该值。如果StateTable没有'MA'条目,请插入它,并对新FK执行相同操作。等等,每一行。

所以最终结果将是两个表:

表A

state
1
2
3

StateTable

state_key    state
1            'MA'
2            'NJ'
3            'HI'

不应该有任何硬编码的东西,因为我需要为其他列做这样的事情,比如状态,它们的有限值数量有点少。

tl;用一种方法来保存列中的数据,同时将列转换为FK表。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:4)

使用自动枚举字段“state_key”创建状态表,使用SELECT DISTINCT ... INTO填充它,并使用类似

的内容
UPDATE TableA SET TableA.state=
   (SELECT state_key FROM StateTable where TableA.state=StateTable.state)

获取值。

答案 1 :(得分:0)

我的建议是做以下

  1. 创建新的状态表(手动或使用insert into statement)
  2. 如果手动创建状态表,请从TableA
  3. 中插入唯一记录
  4. 在TableA(StateID)外键列中创建一个新列,链接到新状态表
  5. 通过将TableA状态与状态表中的状态相匹配并从该表中提取ID,将值插入新的StateID列。
  6. 如果您需要了解查询,请告诉我。