PN1
、PN2
、PN3
、の部品番号列がいくつかあるテーブルがあります otherData
。
PN
部品番号の列を、部品番号を otherData にリンクするという名前の 1 つの列に折りたたむ効率的な MySQL クエリを作成したいと考えています。
この変換は、ビジネス ロジックに必要です。以下のクエリは正しく動作しますが、パフォーマンスを大幅に改善する必要があります。
以下を行うためのより良い方法はありますか?
データを正しく変換しますが、非効率的な SQL クエリ:
SELECT 'Pn', 'Mfg', 'TableId', 'SourceColumn', 'OtherData'
SELECT PN1, Mfg, '26', 'PN1', OtherData FROM Table
UNION ALL
SELECT PN2, Mfg, '26', 'PN2', OtherData FROM Table
UNION ALL
SELECT PN3, Mfg, '26', 'PN3', OtherData FROM Table
UNION ALL
SELECT PN4, Mfg, '26', 'PN4', OtherData
INTO OUTFILE 'XXX.dat'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM Table d;
入力テーブルは次の表のようになります。
| PN1 | PN2 | PN3 | PN4 | MFG | TableId | OtherData |
-----------------------------------------------------------------------
| asdf | abde | 12354 | asdfc | 2 | 26 | 0.2456 |
| nupo | 1354 | null | null | 2 | 26 | 1.53 |
| ... | ... | ... | ... | ... | ... | ... |
| ... | ... | ... | ... | ... | ... | ... |
| ... | ... | ... | ... | ... | ... | ... |
.dat
出力ファイルを次のようにしたい:
"Pn", "Mfg", "TableId", "SourceColumn","OtherData"
"asdf", 2, 26, "PN1", 0.2456
"abde", 2, 26, "PN2", 0.2456
"12354", 2, 26, "PN3", 0.2456
"asdfc", 2, 26, "PN4", 0.2456
"nupo", 2, 26, "PN1", 1.53
"1354", 2, 26, "PN2", 1.53
...
PN1 から PN4 までが PN に折りたたまれていることに注意してください。
MySQL でこの種の変換を行うより高速な方法はありますか?