5

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

我有一张桌子,叫它 TableA,有很多列。其中之一是“状态”,其条目如下:

state
'MA'
'NJ'
'HI'

等等。我想创建某种方法来将这些值提取到一个新的外键表中,称为 StateTable,其中包含 state_key 和 state 列。

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

第 1 行:表 A 中“状态”列中的值为“MA”。检查 StateTable 是否有一个条目,其中“状态”列是“MA”。如果是这样,则获取该行的 state_key,并将 TableA 中的条目替换为外键,以便该行现在具有指向“MA”的 FK,而不是直接存储该值。如果 StateTable 没有“MA”条目,则插入它,并对新的 FK 执行相同操作。依此类推,对于每一行。

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

表A

state
1
2
3

状态表

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

不应该有任何硬编码的东西,因为我也需要对其他列执行此操作,例如状态,它们具有少量有限值。

tl;dr 一种在将列转换为 FK 表时保留列中数据的方法。

有任何想法吗?谢谢!!

4

2 回答 2

6

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

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

将值放入其中。

于 2013-02-01T15:59:29.040 回答
1

我的建议是执行以下操作

  1. 创建新的状态表(手动或使用 insert into 语句)
  2. 如果手动创建您的状态表,请从 TableA 向其中插入唯一记录
  3. 在 TableA (StateID) 外键列中创建一个新列,链接到您的新状态表
  4. 通过将 TableA 状态与状态表中的状态匹配并从该表中提取 ID,将值插入到新的 StateID 列中。

如果您需要帮助查询,请告诉我。

于 2013-02-01T15:58:41.840 回答