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

标签 mysql sql join

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

我有两个表:

-- 组件 -- 列: 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/

相关文章:

mysql - 如何对代码点火器自定义应用程序进行负载测试?

mysql - 在 SQL 中使用having

mysql - SQL计数麻烦

performance - 在表之间进行连接时,决定表顺序的因素是什么?

php - MySQL连接两个表,其中两个日期之间的日期

php - 带有全文 boolean 搜索的多个 AND/OR 选项

php - 直接从 Eloquent 查询中提取和格式化日期

PHP和mysql如何使用join得到想要的结果

php - 使用 smarty 和 php 创建类别树

mysql - php mysql统计进出总流量库存