0

表 1: Factor_Name

ID NAME
1  A
2  A
3  B

表 2: Sample_Info

   ID   FACTOR_ID   INFO
   1    1           Sample_A
   2    2           Sample_B
   3    3           Sample_C

因子名がtable1で同じ場合、2つのテーブルの列をマージしたいのですが、これは予想されるテーブルです:

表 1: Factor_Name

ID NAME
1  A
2  B

表 2: Sample_Info

   ID   FACTOR_ID   INFO
   1    1           Sample_A
   2    1           Sample_B
   3    2           Sample_C

どうすればmysqlでそれを行うことができますか?

4

1 に答える 1

0

あなたは最初にあなたが現在持っているテーブルを複製することによってこれをしたいと思うでしょう:

CREATE TEMPORARY TABLE Factor_Name_Temp as (SELECT * 
                                            FROM Factor_Name) 

CREATE TEMPORARY TABLE Sample_Info_Temp as (SELECT * 
                                            FROM Sample_Info) 

次に、既存のテーブルの内容をクリアする必要があります。また、id列をリセットしたいようです。これらの値を参照する他のテーブルの数によっては、これは少し危険な場合があります。しかし、いずれにしても...

次に、「temp」テーブルのデータを元のテーブルに挿入し直します。再生成する場合はid列を省略します。そうしないと、初期の「最小」値が選択されます(つまり、ギャップが発生します)。

INSERT Factor_Name (id, name) 
SELECT MIN(id), name
FROM Factor_Name_Temp
GROUP BY name

INSERT Sample_Info (id, factor_id, info)
SELECT Sample_Info_Temp.id, Factor_Name.id, Sample_Info_Temp.info
FROM Sample_Info_Temp
JOIN Factor_Name_Temp
  ON Factor_Name_Temp.id = Sample_Info_Temp.factor_id
JOIN Factor_Name
  ON Factor_Name.name = Factor_Name_Temp.name

後片付けを忘れないでください!

(ステートメントはテストされていません-mySQLインスタンスがなく、SQL Fiddleはこれに完全に対応していません)。

于 2013-03-14T15:55:18.487 に答える