0

代わりに、列挙型をリンク テーブルの ID に変更します。

それについてはどうすればよいでしょうか?

現在の列挙名:strat
新しいリンク名:stratid

私が考えていたのは、次のようなものでした。

UPDATE table_name  
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat);

私はまだリンクテーブルを作成していません.今はすべて理論です.

上記は機能しますか?
列挙型からリンクされたテーブルに転送するために変更する必要があるものはありますか?

4

2 に答える 2

0

あなた以外に更新を行うための落とし穴はありません必要オプションが定義されlink_table.idている順序で s が厳密に入力されることを 3 重に確認したいと考えています。table_name.strat

たとえば、「FOO」レコードである必要があるレコードにstratあるenum('FOO', 'BAR')場合。linked_tableid == 1

stratidその後、おそらく列を作成したいと思うでしょうNON NULL。これは以前の配置と厳密には同じではありませんが、おそらくあなたが望むものに近いでしょう.

于 2011-12-15T16:03:08.533 に答える
0

はい、最初にリンク テーブルを作成し
、stratname を一意に設定し
、自動インクリメント ID を使用します

挿入 link_table の遅延ソリューション:

insert into link_table
select distinct strat from table_name order by strat;

ただし、定義済みの列挙型がすべて使用されているかどうかはわかりません。

また、列挙型のサイズが
わからないと、手動で挿入することはお勧めできません。

列挙型を見ると...

enum('...', '...', ...)  <-- is just a comma separated value

したがって、CSVを取得するためのクエリは次のとおりです:-

select column_type from information_schema.columns 
where schema_name="table_name" and column_name = "strat";

プログラミング言語と組み合わせて、link_table の挿入を行うことができます。

最後に、UPDATE クエリはあまり最適化されていません。INNER JOIN を使用するように切り替えることができます。
でも一回限りの仕事だと思いますので、それでいいです!

于 2011-12-15T16:09:54.823 に答える