我有一个表,其中有几个零件代号列:PN1、PN2、PN3、otherData。
我想创建一个高效的MySQL查询,它将把部件号列折叠到一个名为PN的列中,该列将部件号链接到otherData。
这种转换对于我们的业务逻辑是必要的。我在下面有一个查询,它可以正常工作,但我们需要大幅提高性能。
有没有更好的方法来做下面的事情?
转换数据正确,但效率较低的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
...请注意,通过PN4的PN1已折叠为PN。
在MySQL中有没有更快的方法来完成这种转换呢?
发布于 2013-03-02 03:13:31
我在数据库管理员页面下面交叉发布了这个问题
看起来这个查询(至少对于MySQL)是我目前能做的最好的了。如果MySQL实现了对PIVOT / UNPIVOT的支持,那么这个问题应该重新考虑。
https://stackoverflow.com/questions/15095861
复制相似问题