2013-02-01 48 views
4

希望你們能幫我弄清楚我以前沒有遇到過的事情。用外鍵將列中的數據替換爲其他表中的相同數據

我有一個表,稱爲TableA,有很多列。其中之一是'國家',條目如:

state 
'MA' 
'NJ' 
'HI' 

等等。我想創建某種方式將這些值拉出到一個新的外鍵表中,稱之爲StateTable,它將有列state_key和state。

例如,這裏就是我想象它繼續行到行:

第1行:在表A價值「狀態」欄中的「馬」。檢查StateTable是否有'狀態'列爲'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; dr一種將列中的數據保存到FK'd表中的方法。

任何想法?謝謝!!

回答

4

與自動枚舉場「state_key」創建狀態表,使用SELECT DISTINCT ... INTO來填補它,並使用像

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

東西拿到價值進去。

0

我的建議是做以下

  1. 創建新的狀態表(手動或使用INSERT INTO語句)
  2. 如果手動創建狀態表,從表A插入唯一記錄到它
  3. 在TableA(StateID)外鍵列中創建一個鏈接到新狀態表的新列
  4. 通過將TableA狀態與狀態表中的狀態進行匹配並從該表中拉出ID,將值插入到您的新StateID列中。

如果您需要查詢的手,請告訴我。

相關問題