gpt4 book ai didi

mysql - SQL 连接映射表并返回列而不是行

转载 作者:行者123 更新时间:2023-11-29 19:09:55 27 4
gpt4 key购买 nike

两天以来我一直在努力寻找解决方案......

我有两个表:

-- 组件 -- 列:id |名称 |描述

-- 组件成分 -- 列:组件 ID |成分_id

=> 一种成分可以有多种成分

所以当我用我的语句连接表格时:

从组件 c 中选择 * INNER JOIN Components_ingredients ci ON c.id = ci.component_id

我为表 ci 中的每种成分返回一行。但我只想返回一行,其中包含匹配的成分作为附加列,例如:

c.id | c.名称 | c.描述| ci.成分1 | ci.成分2 | ci.ingredient3 ...

这可能吗?何时如何?

谢谢

最佳答案

您可以尝试使用MySQL的GROUP_CONCAT()函数为每个给定组件创建成分的 CSV 列表。

SELECT c.id, c.name, c.description, ci.ingredients
FROM components c
INNER JOIN
(
SELECT component_id, GROUP_CONCAT(ingredient_id) AS ingredients
FROM components_ingredients
GROUP BY component_id
) ci
ON c.id = ci.component_id

请注意,正如 @Gordon 指出的那样,您也许可以不用我使用的子查询,但一般来说您可能需要它。即使根据 ANSI 标准,Gordon 的查询仍然有效的原因是 components 表中给定的 id 应该唯一确定 name >描述。因此,在使用 GROUP BY 时包含这些列是可以的,因为不会产生歧义。

关于mysql - SQL 连接映射表并返回列而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43169721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com