現在、社内の部品採番台帳をAccessからMySQLに移行する作業をしています。
Accessの約6万件のデータをMySQLのワークテーブルに入れ込みました。
現在の部品台帳のワークテーブルは以下のようになっています。
|CODE|KEYCODE|CATEGORY|NAME|備考|
|:--|:--:|--:|
|AA1000-01|AA1000-01|0|抵抗1|特に別管理を必要としないもの|
|BA1000-01|AA1000-01|1|抵抗1|AA1000-01と同じ部品だけど△△管理するもの|
|CA1000-01|AA1000-01|2|抵抗1|AA1000-01と同じ部品だけど○○管理するもの|
|BA1001-01|AA1001-01|1|抵抗2|このようにAAのコードがないものもあります|
|CA1002-01|AA1002-01|2|抵抗3|このようにAAのコードがないものもあります|
これを以下のように1つのレコードにしたいと考えています。
|KEYCODE|CODE-A|CODE-B|CODE-C|NAME|
|:--|:--:|--:|
|AA1000-01|AA1000-01|BA1000-01|CA1000-01|抵抗1|
|AA1001-01|NULL|BA1001-01|NULL|抵抗2|
|AA1002-01|NULL|NULL|CA1002-01|抵抗3|
これを実現するSQL(できる限り実行速度が速いもの)を教えていただけないでしょうか。
自分で考えたサブクエリーで引き当てしようとすると
6万件のデータでは遅くて一向に処理が返ってきませんでした。
実はAccessのデータをCSV(SJIS)に落として
C#で作ったアプリで文字分解してKEYCODE、CATEGORYを作成し
UTF8変換してMYSQLのワークテーブルに入れ込みました。
SQLでスマートにできない場合は、この処理過程でCATEGORY=0のものを1つ1つ先に
テーブルにインサートして、CATEGORY=1のものをKEYCODEで検索してUPDATEして・・・
なければインサートして・・・
という処理も視野に入れていますが、全然スマートじゃない気がして質問しました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/02/21 06:04