1

PN1PN2PN3、の部品番号列がいくつかあるテーブルがあります 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 でこの種の変換を行うより高速な方法はありますか?

4

1 に答える 1

1

この質問は、次のデータベース管理者ページに相互投稿しま​​した。

https://dba.stackexchange.com/questions/35514/better-query-to-select-multiple-columns-into-a-single-output-column

クエリは、(少なくとも MySQL の場合) 当分の間、私ができる最善の方法のようです。PIVOTMySQL が/のサポートを実装したことUNPIVOTがある場合は、この質問を再検討する必要があります。

于 2013-03-01T19:13:30.857 に答える