多个id行到单行sql

时间:2014-03-27 10:26:57

标签: mysql sql

我有这两张桌子。第一个是 product_to_category

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

4 个答案:

答案 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()的某些限制)。