MySql:动态添加列,与另一个表中的行一样多

时间:2018-02-21 22:45:14

标签: mysql pivot-table

运输表

id  name
1   T1
2   T2

托盘表

id  name
1   P1
2   P2

运输托盘容量表

id  transport_id  pallet_id  capacity
1   1             1          10
2   1             2          null
3   2             1          20
4   2             2          24

如何生成这样的表:

id  transport_id   pallet_id_1_capacity   pallet_id_2_capacity
1   1              10                     null
2   2              20                     24

问题:可以添加托盘和运输工具,因此,事先都不知道数量。 例如,经理添加了另一个托盘类型和' pallet_id_3_capacity'应生成列(如果尚未提供容量数据,则可以显示null)。 另一位经理可以填写“托盘运输能力”。表格后通知。

有没有办法在mysql中构建可以关注上述内容的sql:具体来说 - 托盘的动态数量?

1 个答案:

答案 0 :(得分:1)

在编写查询时必须修复SQL选择列表。您无法根据找到的数据生成自动扩展列的SQL。

但是您的请求很常见,它被称为数据透视表或交叉表。

唯一的解决方案是分多步执行此操作:

  1. 查询以发现不同的托盘ID。
  2. 使用应用程序代码构建动态SQL查询,其列数与第一个查询中找到的不同托盘ID值一样多。
  3. 运行生成的动态SQL查询。
  4. 所有SQL数据库都是如此,而不仅仅是MySQL。

    有关在MySQL中生成数据透视表查询的高度投票解决方案,请参阅MySQL pivot row into dynamic number of columns

    我不会将您的问题投票作为该问题的副本,因为您的查询还涉及transport_id,这将使查询解决方案略有不同。但阅读其他数据透视表解决方案应该可以帮助您入门。