【问题标题】:MySQL, breakout multiple fields from a table into one columnMySQL,将表中的多个字段拆分为一列
【发布时间】:2013-02-26 17:49:57
【问题描述】:

我有一个包含多个零件编号列的表:PN1PN2PN3otherData

我想创建一个高效的 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
...

请注意,PN1 到 PN4 被折叠成 PN。

有没有更快的方法在 MySQL 中进行这种转换?

【问题讨论】:

  • 您可以使用创建动态查询的存储过程来完成。不过我不知道怎么写。
  • “group_concat 反向”是什么意思?显示示例输入和输出数据以说明您的意思。此外,您真正想要做什么对我们来说仍然是个谜(您的问题似乎是关于问题的解决方案,但可能有更好的方法)。
  • 刚刚编辑了问题以使其(希望)更清晰
  • 请显示真实结果,您的查询不能导出给定的输出
  • 不是。当我添加“INTO”子句时,它会中断。这就是我所说的“某种程度”。输出是我想要得到的,而不是我得到的。刚刚添加了关于 INTO OUTFILE 子句的注释

标签: mysql union-all into-outfile


【解决方案1】:

我在数据库管理员页面下交叉发布了这个问题

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

目前看来,该查询(至少对于 MySQL)是我能做的最好的。如果 MySQL 曾经实现对 PIVOT / UNPIVOT 的支持,那么应该重新审视这个问题。

【讨论】:

    猜你喜欢
    • 2019-09-23
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多