MySQL 将多列合并为一 'temporary' 列

MySQL Merge multiple colums into one 'temporary' column

我很好奇,是否可以将多列(用逗号或其他内容分隔)合并为一列。

例如,我有这些tables(语言):

language_id    |   language_iso  
    1                   NL
    2                   EN
    3                   GT
    4                   EN

(域)

domain_id    |   domain_name  
    1                example

另一个 table 将语言链接到网络域

languagetodomain_id    |   languagetodomain_lang    |   languagetodomain_domain
    1                               1                            1
    2                               2                            1
    3                               4                            1
    4                               3                            1

并按此顺序检索它们(一列作为提醒)

domain_id    |   domain_name    | TemporaryColumn
    1                example         {1,2,4,3}

这应该有效:

SELECT Domains.*, CONCAT('{',GROUP_CONCAT(languagetodomain_lang),'}') AS TemporaryColumn
FROM Domains
JOIN LanguageToDomain ON LanguageToDomain.languagetodomain_domain = Domains.domain_id
GROUP BY domain_id

函数 GROUP_CONCAT 将值分组,用逗号分隔。我使用普通 CONCAT 函数添加了括号。 您需要在 domain_id 上进行分组,这样它会占用您拥有的每个域的所有 languagetodomain_lang

我猜到了 languagetodomain 的 table 名称,因为你没有提供它。

拼写:

Group_Concat 允许您跨行合并数据。

SELECT D.Domain_Id
  , D.Domain_Name
  , Group_Concat(LanguageToDomain_Lang, 
        ORDER BY LanguageToDomain_ID DESC SEPARATOR ',') as TemporaryColumn
FROM Domains D
INNER JOIN WebDomain WD
 on D.Domain_ID = WD.LanguageToDomain_ID
GROUP BY D.Domain_Id, D.Domain_Name