2

私は、MSSQL サーバーから MySQL サーバーへのデータの移行を任されました。最初に MSSQL データベースを MS Access データベースに変換した方が簡単だと思ったので、いじってから MySQL としてエクスポートしました。

だから、私は会社と呼ばれるテーブルを持っています:

companyID |    name        |     c_phon  |  c_email                   | c_address
    1       StackOverflow     5555555555     Joel@stackoverflow.com      NYC
    2       Google            5558675309     Google@google.com           NYC

新しいデータベースでは、これらのフィールドの保存方法を変更しました。各行に電話番号、電子メール、住所が含まれている代わりに、prefs テーブルを使用しています。

設定:

prefID  |  prefName
  1         c_phone
  2         c_email
  3         c_address

私の問題は、各フィールドを companyPrefs テーブルの独自の行に変換する方法です。次のようになります。

companyID | prefID | prefValue
    1         1      5555555555
    1         2      Joel@stackoverflow.com
    1         3      NYC
    2         1      5558675309
    2         2      Google@google.com
    2         3      NYC

vbscriptなどの使い方がわからないので、SQLを使ってこれをやろうとしていました。

INSERT INTO comanyPrefs (companyID, prefID, prefValue)
SELECT companyID, prefID, @fieldName
FROM companies, preferences
WHERE @fieldName = prefName

明らかにこれは機能しません。可変フィールド名を使用してフィールドを選択するにはどうすればよいですか? 各フィールドに行を挿入するにはどうすればよいですか?

4

1 に答える 1

2

あなたは正しい軌道に乗っています。ただし、可能なフィールドごとに次のように挿入する必要があります。

INSERT INTO companyPrefs (companyID, prefID, prefValue)
SELECT companyID, (select prefID from prefs where prefName = 'c_phone'), c_phone
FROM companies where c_phone is not null
UNION
SELECT companyID, (select prefID from prefs where prefName = 'c_email'), c_email
FROM companies where c_email is not null
UNION
SELECT companyID, (select prefID from prefs where prefName = 'c_address'), c_address
FROM companies where c_address is not null

デモ: http://www.sqlfiddle.com/#!3/5cf87/1

于 2012-05-22T21:07:03.123 に答える