我有2个要加入的mysql表,但我希望“类别”列的结果位于新列而不是行中。
第一个看起来像这样
table name = petshop.product
|==========================|
|product_id | product_name |
|==========================|
| 1 | Dog & Cat Toy|
| 2 | Dog Food |
|==========================|
第二个看起来像这样
table name = petshop.category
|============================|
|category_id | category_name |
|============================|
| 1 |Dog |
| 2 |Food |
| 3 |Toy |
| 4 |Cat |
|============================|
我还有另一个表来存储看起来像这样的关系
table name = petshop.product_category
=================================
|pc_id| product_id | category_id|
|===============================|
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 1 | 4 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
|===============================|
我如何输出结果看起来像这样的表
|====================================================|
|product_name| category1 | category2 | category3 |
|====================================================|
|Dog&Cat Toy | Dog | Toy | Cat |
|Dog Food | Dog | Food | NULL |
|====================================================|
我读到有关数据透视的内容,但我无法绕过它(说实话,这对mysql和编码来说确实是全新的)。 谢谢!
答案 0 :(得分:0)
在MySQL 8.0中,您可以通过联接,row_number()
来枚举每个产品的类别,并通过条件聚合来枢转结果集:
select
product_name,
max(case when rn = 1 then category_name end) category1,
max(case when rn = 2 then category_name end) category2,
max(case when rn = 3 then category_name end) category3
from (
select
p.product_id,
p.product_name,
c.category_name,
row_number() over(partition by p.product_id order by c.category_id) rn
from product p
inner join product_category pc on pc.product_id = p.product_id
inner join category c on c.category_id = pc.category_id
) t
group by product_id, product_name