【发布时间】:2016-02-04 14:24:50
【问题描述】:
我有以下表格:
用户:
+---------------------------+
| id | e-mail |
+---------------------------+
| 1 | john@domain.com |
+---------------------------+
| 2 | jane@domain.com |
+---------------------------+
| 3 | mark@domain.com |
+---------------------------+
书籍:
+-------------------------------+
| id | user_id | value |
+-------------------------------+
| 1 | 1 | ABC |
+-------------------------------+
| 2 | 1 | HIJ |
+-------------------------------+
| 3 | 2 | XYZ |
+-------------------------------+
我想构建一个查询以获得以下结果:
+-------------------------------------------------------+
| user_id | e-mail | value_1 | value_2 |
+-------------------------------------------------------+
| 1 | john@domain.com | ABC | HIJ |
+-------------------------------------------------------+
| 2 | jane@domain.com | XYZ | NULL |
+-------------------------------------------------------+
| 3 | mark@domain.com | NULL | NULL |
+-------------------------------------------------------+
因此,结果列是根据最大书籍数量动态构建的。如果 john@domain.com 有第三本书,那么结果表应该包含 3 个“值”列,对于 jane@domain.com 和 mark@domain.com,该列将为 NULL。 这样的事情在 MySQL 中是可能的吗?
【问题讨论】:
-
看起来很经典
PIVOT -
直接不可能(在存储过程中沉迷于动态 SQL)。如果您准备达到该长度(我建议您尝试将数据的表示放入数据库调用中),那么一个查询可以返回每个用户 ID 的最大值数,然后使用它来动态为旋转的结果集构建查询。
标签: mysql dynamic left-join multiple-columns