product_id category_id
7538 5
7538 128
7538 139
第二个是 category_description
category_id name
5 toys
128 toys for kids
139 teddy bears
我摔坏了脑袋,无法得到我想要的东西。类别的名称可以随时更改,因此不能在枢轴中使用类别的名称。 我想要的输出应
product_id category_main category_sub1 category_sub2
7538 toys toys for kids teddy bears
如何做到这一点?我不擅长sql
答案 0 :(得分:1)
如何做到这一点?我不擅长sql
无法使用您数据库的当前架构,因为从子类别到类别'玩具的链接 缺少!
您必须包含其他人已指出的 parentId 列,然后手动确定哪些类别彼此属于。
但是,您可能会找到一次更新所有类别的模式。 例如,父类别ID 始终是否低于其子类别?
答案 1 :(得分:0)
你在找这个吗?
select P.product_id,
max(case when rownum = 1 then N.name end) category_main,
max(case when rownum = 2 then N.name end) category_sub1,
max(case when rownum = 3 then N.name end) category_sub2
from
(
select product_id,
category_id,
@row:=if(@prev=product_id,@row,0) + 1 as rownum,
@prev:=product_id
from product_to_category
order by product_id
) P JOIN category_description N on N.category_id = P.category_id
group by P.product_id;
答案 2 :(得分:0)
将parent列添加到category_description表中,如下所示
category_id name parent_id 5 toys 0 128 toys for kids 5 139 teddy bears 5
并使用this查询的答案。
答案 3 :(得分:0)
将表格转换为多列有点痛苦。但是,您可以使用group_concat()
:
select product_id, group_concat(name) as names
from product_to_category p2c join
category_description cd
on p2c.category_id = cd.category_id
group by product_id;
这样做的另一个好处是,可以为给定的产品表示任意数量的类别(最多group_concat()
的某些限制)。