mysql pivot查询2个表左连接

时间:2018-02-12 20:08:20

标签: mysql pivot

我无法创建我可以从其他线程读取的内容称为PIVOT表。

认为答案在本文http://stratosprovatopoulos.com/web-development/mysql/pivot-table-with-dynamic-columns/中,但无法理解它

我有一张产品表和一张图表 一种产品可以有很多图像。

如果我帮忙,可以说一个产品最多可以有8个图像。

产品

+----------+-------------+
|ProductId | ProductName |
+----------+-------------+
|        1 | ProductA    |
+----------+-------------+
|        2 | ProductB    |
+----------|-------------+

IMAGE

+----------+-------------+
|ProductId | ImageName   |
+----------+-------------+
|        1 | FileA       |
+----------+-------------+
|        1 | FileB       |
+----------|-------------+
|        2 | FileC       |
+----------|-------------+

我现在拥有什么

SELECT p.ProductId, ProductName, ImageName
FROM PRODUCT p
LEFT JOIN IMAGE i
ON p.ProductId = i.ProductId
+----------+-------------+-----------+
|ProductId | ProductName | ImageName |
+----------+-------------+-----------+
|        1 | ProductA    | FileA     |
+----------+-------------+-----------+
|        1 | ProductA    | FileB     |
+----------+-------------+-----------+
|        2 | ProductB    | FileC     |
+----------+-------------+-----------+

我需要什么

+----------+-------------+---------+---------+
|ProductId | ProductName | Image1  | Image2  |
+----------+-------------+---------+---------+
|        1 | ProductA    | FileA   | FileB   |
+----------+-------------+---------+---------+
|        2 | ProductB    | FileC   |         |
+----------+-------------+---------+---------+

1 个答案:

答案 0 :(得分:0)

您无法使用显示数据的方式进行转动。无法为透视表提供动态列名称。正如Barmar所提到的,您需要编写一个排名函数,该函数将显示生产重复的动态值(例如“文件1”,“文件2”,“文件3”等)。这是一个过度复杂化。

如果您只需要将所有图像片段放入一行,请使用PM 77-1解决方案和group_concat。然后,您可以随后将其拆分为“,”。