2011-08-05 7 views
1

私はCSVファイルからテーブルを作成しました。テーブルにはこのプロジェクトに必要なすべてのデータが含まれていますが、結果のテーブルは正規化されていません。私の仕事はこのテーブルをきれいにして正規化することです。 TableAのからのフィールド値値1が与えられテーブル内の値をルックアップし、同じテーブルに参照結果を挿入するにはどうすればよいですか?

  1. 、どのように私はテーブルBにその値を検索し、TableAのでFKの列にTableBのからPKを配置していますか?

  2. 質問1と同じ例外複数の列を検索する必要があります。 TableAのフィールド値Value1とValue2を与えられたら、TableBでその組み合わせを検索し、TableAのPKをTableBのFK列に配置するにはどうすればよいですか?

答えて

3

これは、#1のために働く必要があります。

#2の
UPDATE TableA 
SET FKColumn = b.PKColumn 
FROM TableA as a 
INNER JOIN TableB as b 
ON a.Value1 = b.Value1 

UPDATE TableA 
SET FKColumn = b.PKColumn 
FROM TableA as a 
INNER JOIN TableB as b 
ON a.Value1 = b.Value1 AND a.Value2 = b.Value2 
+0

ちょうど私にそれを打つ! – ipr101

+0

とてもいいです!そうでなければエラーを引き起こすset文を少し調整しました。 –

0
UPDATE TableA SET FKColumn = TableB.PKColumn 
FROM TableB 
WHERE TableA.Value1 = TableB.Value1 

UPDATE TableA SET FKColumn = TableB.PKColumn 
FROM TableB 
WHERE TableA.Value1 = TableB.Value1 AND TableA.Value2 = TableB.Value2 
0
UPDATE TableA a 
SET a.fk_col = (select b.pk_col 
       from TableB b 
       where b.value = a.value); 

そして

UPDATE TableA a 
SET a.fk_col = (select b.pk_col 
       from TableB b 
       where b.value = a.value1 
       and b.value = a.value2); 
0

論理的に、それはこのようなものでなければなりません:

UPDATE TableA 
    SET FK_col = 
     (SELECT PK_col 
      FROM TableB 
     WHERE TableB.TableA_field = TableA.field) 
WHERE <your filter criteria on TableA> 

しかし、少なくともMySQLでは、あなたが直接、いくつかの状況では、このようなサブクエリでテーブルAを参照することはできませんが、これは別のに回避することができます状況に応じた方法。同じことがSQL Serverに当てはまるかどうかはわかりませんが、決して触れません。

編集:その間に投稿された他の回答はおそらく私よりも優れていると思います! ;)