0

古い MySQL ベースを新しいものに変更しようとしています。自分では解決できないので質問させてください。

5 つの列を持つ古いテーブルがあります。

*table_old*
id | name_1 | name_2 | name_3 | role 
 1 |    aaa |    bbb |    ccc |    g 
 2 |    aaa |    ccc |    ddd |    f 
 3 |    bbb |    aaa |    ddd |    g 

等々。

2 つの列で名前の値を格納する新しいテーブルを作成しました。次のようになります。

*table_name*
id | name 
 1 |  aaa
 2 |  bbb
 3 |  ccc
 4 |  ddd

それを使用して新しいテーブルに名前を付けているため (古いテーブルの最後の列)、4 つの列を持つ新しいテーブルを作成できます。

*table_g*
id | name_1 | name_2 | name_3
 1 |    aaa |    bbb |    ccc
 2 |    bbb |    aaa |    ddd

*table_f*
id | name_1 | name_2 | name_3
 1 |    aaa |    ccc |    ddd

また、名前が非常に長くなる可能性があるため、名前の代わりにテーブル 2 の id 値を使用することをお勧めします。そのようなものを取得したいと思います。

*table_g*
id | id_1 | id_2 | id_3
 1 |    1 |    2 |    3
 2 |    2 |    1 |    4

*table_f*
id | id_1 | id_2 | id_3
1  |    1 |    3 |    4

列の名前を *name_1* から *id_1* などに変更しました。

今、私は助けを求めています。私はそのようなものを使用しようとしています:

INSERT INTO `table_g`(`id_1`, `id_2`, `id_3`)
SELECT `table_name`.`id`,`table_name`.`id`,`table_name`.`id`
FROM `table_name` 
  RIGHT JOIN `table_old` ON `table_name`.`name` = `table_old`.`name_1`
  RIGHT JOIN `table_old` ON `table_name`.`name` = `table_old`.`name_2`
  RIGHT JOIN `table_old` ON `table_name`.`name` = `table_old`.`name_3`
WHERE `table_old`.`role` = 'g';

しかし、これはうまくいきません...できれば助けてください:/

4

1 に答える 1

4
INSERT INTO `table_g`(`id_1`, `id_2`, `id_3`)
SELECT t1.`id`, t2.`id`, t3.`id`
FROM `table_name` tn
  RIGHT JOIN `table_old` t1 ON tn.`name` = t1.`name_1` AND t1.`role` = 'g'
  RIGHT JOIN `table_old` t2 ON tn.`name` = t2.`name_2` AND t2.`role` = 'g'
  RIGHT JOIN `table_old` t3 ON tn.`name` = t3.`name_3` AND t3.`role` = 'g'

一見したところ、select には多くのあいまいさが含まれているため、少なくとも上記のコードを使用して何が起こるかを試してください。

于 2012-04-19T12:22:36.093 に答える