我正在寻求解决以下问题:
SELECT DISTINCT
_2_12_company.companyInitials,
_2_05_comptype.typeInitials
FROM
_2_12_company,
_2_05_comptype,
_2_19_companycomptype
WHERE
_2_12_company.id = _2_19_companycomptype.companyID
AND _2_05_comptype.id = _2_19_companycomptype.typeID
这是结果
AMAZON | MICROSOFT
AMAZON | FACEBOOK
AMAZON | ALI EXPRESS
但我希望结果以动态的方式像下面这样
AMAZON | MICROSOFT/FACEBOOK/ALI EXPRESS
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的问题实际上是在数据库查询中如何实现将相同公司名称(companyInitials
)的不同类型(typeInitials
)合并到同一行显示。在SQL中,可以使用GROUP_CONCAT
函数(MySQL)或STRING_AGG
函数(PostgreSQL)来实现这样的需求。由于你没有指定具体的数据库类型,我将提供一个在MySQL中的解决方案示例:
SELECT
_2_12_company.companyInitials,
GROUP_CONCAT(DISTINCT _2_05_comptype.typeInitials ORDER BY _2_05_comptype.typeInitials SEPARATOR '/') AS combinedTypes
FROM
_2_12_company
JOIN
_2_19_companycomptype ON _2_12_company.id = _2_19_companycomptype.companyID
JOIN
_2_05_comptype ON _2_05_comptype.id = _2_19_companycomptype.typeID
GROUP BY
_2_12_company.companyInitials;
在这个查询中,我做了以下几点修改:
FROM
子句中列出所有表更清晰,也更符合现代SQL的书写习惯。GROUP_CONCAT
函数:这个函数会将同一个公司名下的所有类型初始字母用指定的分隔符(这里是/
)连接起来。DISTINCT
关键字:确保每个公司对应的类型列表中不包含重复的类型初始字母。ORDER BY
:在GROUP_CONCAT
内部排序,以保持结果的一致性和可读性。GROUP BY
子句:按照公司名称进行分组,这是使用GROUP_CONCAT
的前提。请根据你实际使用的数据库系统调整函数名,比如如果使用的是PostgreSQL,应使用STRING_AGG
替代GROUP_CONCAT
。