【问题标题】:MySQL Merge multiple colums into one 'temporary' columnMySQL将多列合并为一个“临时”列
【发布时间】:2016-04-07 20:20:08
【问题描述】:

我很好奇这个事实,是否可以将多列(用逗号或其他东西分隔)合并到一列中。

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

language_id    |   language_iso  
    1                   NL
    2                   EN
    3                   GT
    4                   EN

(域)

domain_id    |   domain_name  
    1                example

还有一个将语言链接到网络域的表格

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}

【问题讨论】:

标签: mysql sql merge multiple-columns temporary


【解决方案1】:

这应该有效:

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 的表名,因为你没有提供它。

【讨论】:

  • 我一直收到这条消息,我只能返回 1 行。那么这将如何解决多行问题呢?
  • 对不起,我把 group_concat 和 concat_ws 搞混了,让我先修复它
  • 已修复,我真的不知道你会在哪里得到那个错误。你能更新看看你现在有什么吗?
  • 我的错,忘记提及由于使用子查询正在检索数据。
  • 您自己修过吗?如果没有,请更新您的问题,我再看看
【解决方案2】:

拼写出来:

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

【讨论】:

    猜你喜欢
    • 2015-04-26
    • 2011-11-25
    • 1970-01-01
    • 2014-05-09
    • 2013-01-23
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多