【问题标题】:MYSQL SELECT repeatable fields into columnsMYSQL SELECT 可重复字段到列中
【发布时间】:2012-05-03 21:52:46
【问题描述】:

我不确定是否必须制作数据透视表或一些子查询才能获得所需的结果,但这是我拥有的表:

asset_id id 标题 title_type
34 1 集 1 5
34 2 TNS 4
34 3 WXPR 3
35 4 集 57 5
35 5 BLSH 4
35 6 WXRE 3
36 7 集 56 5
36 8 BLSH 4
36 9 WXRE 3

但这就是我想要的。每个 title_type 都在它自己的列中,并且 title_type 为 4 = BLSH 的 WHERE 标题。像这样:

资产 ID title_type 5 title_type 4 title_type 3 35 集 56 BLSH WXRE 36 集 57 BLSH WXRE

【问题讨论】:

  • 有多少种不同的标题类型?它们会随时更改吗?您的查询必须有多灵活?添加新标题类型时,查询是否必须自动适应?
  • 嗨!现在,我只使用标题类型:3、4 和 5。我不预见这种情况会改变。尽管标题可能会改变(拼写或类似的东西),但与该标题关联的 title_type 将始终保持不变。

标签: mysql subquery pivot pivot-table


【解决方案1】:

真正的解决办法当然是改变你的数据库结构 ;-)

但是,您可以使用 JOIN 来获取所需的数据。在我的示例中,不涉及子选择:

SELECT 
  o.asset_id, 
  /* select the data from the self-joins */
  `5`.title AS title_type_5,
  `4`.title AS title_type_4,
  `3`.title AS title_type_3
FROM 
  foo o
/* use self-joins to combine data of multiple rows in a single row */
LEFT JOIN foo `3` ON `3`.title_type = 3 AND `3`.asset_id = o.asset_id
LEFT JOIN foo `4` ON `4`.title_type = 4 AND `4`.asset_id = o.asset_id
LEFT JOIN foo `5` ON `5`.title_type = 5 AND `5`.asset_id = o.asset_id
WHERE 
  o.title_type = "4" 
  AND o.title = "BLSH"

Try my example on SQLfiddle

【讨论】:

  • 有效!我可能已经过度简化了表格来说明问题,但是任何关于如何制作更好结构的见解都会非常受欢迎!非常感谢!
猜你喜欢
  • 2019-01-16
  • 2020-01-02
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多