5

うまくいけば、私が以前に遭遇したことのないことを行う方法を理解するのを手伝ってくれます.

私はテーブルを持っています。それをTableAと呼び、多くの列があります。それらの 1 つは「状態」で、次のようなエントリがあります。

state
'MA'
'NJ'
'HI'

など。これらの値を、state_key 列と state 列を持つ StateTable と呼ぶ、新しい外部キー テーブルに引き出す何らかの方法を作成したいと思います。

たとえば、次のように行ごとに処理を進めていきます。

行 1: TableA の「状態」列の値は「MA」です。StateTable に、'state' 列が 'MA' であるエントリがあるかどうかを確認してください。その場合は、その行の state_key を取得し、TableA のエントリを外部キーに置き換えて、その値を直接格納する代わりに、その行に「MA」への FK が含まれるようにします。StateTable に「MA」エントリがない場合は、それを挿入し、新しい FK で同じことを行います。など、行ごとに。

したがって、最終結果は 2 つのテーブルになります。

表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. 新しい状態テーブルを作成します (手動で、またはステートメントへの挿入を使用して)
  2. 状態テーブルを手動で作成する場合は、TableA から一意のレコードを挿入します
  3. 新しい状態テーブルにリンクされた、TableA (StateID) 外部キー列に新しい列を作成します。
  4. TableA の状態を状態テーブルの状態と一致させ、そのテーブルから ID を取得して、新しい StateID 列に値を挿入します。

クエリを処理する必要がある場合は、お知らせください。

于 2013-02-01T15:58:41.840 に答える