首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将多个子行组合成一行MySQL

将多个子行组合成一行MySQL
EN

Stack Overflow用户
提问于 2018-03-20 06:31:28
回答 2查看 0关注 0票数 0

提前谢了,我就是不明白!

我有两张桌子

有序_项目

ID | Item_Name
1  | Pizza
2  | Stromboli

有序_备选方案

Ordered_Item_ID | Option_Number | Value
        1               43         Pepperoni
        1               44         Extra Cheese
        2               44         Extra Cheese

我想要输出的是MySQL查询。

输出量

ID | Item_Name | Option_1 | Option_2
1    Pizza       Pepperoni  Extra Cheese
2    Stromboli     NULL     Extra Cheese

我尝试过许多选项--大多数以语法错误结尾,我尝试过组。_但这并不是我想要的。下面我有一个粗略的例子,说明我认为可能是一个开始。每次我都需要选择的顺序是一样的。而在收集信息的程序中,没有办法可靠地确保这将发生。是否可以根据选项号进行连接。另外,我知道我永远不会有超过5个选项,所以静态解决方案会起作用。

Select Ordered_Items.ID,
    Ordered_Items.Item_Name,
FROM Ordered_Items
    JOIN (SELECT Ordered_Options.Value FROM Ordered_Options Where Option_Number = 43) as Option_1 
        ON Ordered_Options.Ordered_Item_ID = Ordered_Item.ID
    JOIN (SELECT Ordered_Options.Value FROM Ordered_Options Where Option_Number = 44) as Option_2 
        ON Ordered_Options.Ordered_Item_ID = Ordered_Item.ID;
EN

回答 2

Stack Overflow用户

发布于 2018-03-20 15:24:17

最简单的方法就是利用这个小组_这里的群函数..。

select
  ordered_item.id as `Id`,
  ordered_item.Item_Name as `ItemName`,
  GROUP_CONCAT(Ordered_Options.Value) as `Options`
from
  ordered_item,
  ordered_options
where
  ordered_item.id=ordered_options.ordered_item_id
group by
  ordered_item.id

它的产出:

Id              ItemName       Options

1               Pizza          Pepperoni,Extra Cheese

2               Stromboli      Extra Cheese

这样,就可以拥有任意多的选项,而不必修改查询。

啊,如果你看到你的结果被裁剪了,你可以增加组的大小限制。_像这样:

SET SESSION group_concat_max_len = 8192;
票数 0
EN

Stack Overflow用户

发布于 2018-03-20 16:26:06

我很感谢你的帮助,我想我已经找到了一个解决办法,如果有人能对我的有效性发表评论的话,我会很感激的。本质上我所做的就是。我意识到它的实现有点静态,但是我做了我需要它做的事情(原谅不正确的语法)。

SELECT
  ordered_item.id as `Id`,
  ordered_item.Item_Name as `ItemName`,
  Options1.Value
  Options2.Value
FROM ORDERED_ITEMS
LEFT JOIN (Ordered_Options as Options1)
    ON (Options1.Ordered_Item.ID = Ordered_Options.Ordered_Item_ID 
        AND Options1.Option_Number = 43)
LEFT JOIN (Ordered_Options as Options2)
    ON (Options2.Ordered_Item.ID = Ordered_Options.Ordered_Item_ID
        AND Options2.Option_Number = 44);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档