我有一个表,其中有几个零件号列: PN1
, PN2
, PN3
, otherData
。
我想创建一个高效的 MySQL 查询,它将零件编号列折叠到一个称为PN
将零件编号链接到 otherData 的列中。
这种转换对于我们的业务逻辑是必要的。我在下面有一个可以正常工作的查询,但我们需要大幅提高性能。
有没有更好的方法来执行以下操作?
SQL Query 可以正确转换数据,但效率低下:
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 中进行这种转换?