【问题标题】:MySQL concat multiple rows into a single rowMySQL将多行连接成一行
【发布时间】:2011-06-24 04:13:44
【问题描述】:

我有一个查询在 MySQL 中返回多行,如下所示:

attribute_name  value
----------------------------------------
username          emailuser
domain          mydomain.com

我需要的输出如下:

username       domain
-----------------------------
emailuser     mydomain.com

当前 SQL:

    SELECT pa2.attribute_name, upa2.value
      FROM product p

INNER JOIN product_attribute pa ON p.product_id = pa.product_id
       AND pa.attribute_name = 'alias'

INNER JOIN user_product_attribute upa ON pa.product_attribute_id upa.product_attribute_id

INNER JOIN user_product_attribute upa2 ON upa.user_product_id = upa2.user_product_id

INNER JOIN product_attribute pa2 ON pa2.product_attribute_id = upa2.product_attribute_id
    AND pa2.attribute_name
    IN (
    'username', 'domain'
    )

WHERE p.product_name = 'email'
AND upa.value = 'emailalias@domainalias'

我一直在查看 group_concat,但我认为这是错误的路径。有什么建议吗?

【问题讨论】:

  • 我想你已经在your previous question 中找到了答案。只需将my answer的第一行修改为:SELECT upa1.value as username, upa2.value as domain
  • 嗨,乔,感谢您再次查看我的一个问题。upa1 用于拉回与别名匹配的值。upa2 将用户名和域作为单独的行返回 2 个值。跨度>

标签: mysql stored-procedures concat


【解决方案1】:

group_concat 没有问题。下面的查询会很慢,但对于一个小表来说,这可能并不重要。

SELECT 
GROUP_CONCAT(IF(`attribute_name`='username', `value`,'')) AS `username`,
GROUP_CONCAT(IF(`attribute_name`='domain', `value`, '')) AS `domain`,
FROM (your old table or the select query)
GROUP BY `attribute_name` 

【讨论】:

  • 感谢您的回答,辛苦了.. 我没有意识到您可以使用这样的条件语句.. 我可能不得不寻找一种更快的方法,但它让我走上了正确的轨道相信..
猜你喜欢
  • 1970-01-01
  • 2012-02-25
  • 2017-06-19
  • 1970-01-01
  • 2022-11-23
  • 2023-01-15
  • 1970-01-01
  • 2015-10-06
  • 2016-06-29
相关资源
最近更新 更多