两天以来我一直在努力寻找解决方案......
我有两个表:
-- 组件 -- 列: 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/