MySQL将多行压缩为一行
我有一个查询返回多行,如MySQL中的以下行:MySQL将多行压缩为一行,mysql,stored-procedures,concat,Mysql,Stored Procedures,Concat,我有一个查询返回多行,如MySQL中的以下行: attribute_name value ---------------------------------------- username emailuser domain mydomain.com 我需要的输出如下: username domain ----------------------------- emailuser mydomain.com 当前SQL: SELE
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,但我认为这是一条错误的道路。。有什么建议吗?与
小组讨论没有问题。下面的查询速度会很慢,但对于一个小表来说,这可能并不重要
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`
我想你已经有了答案。只需将第一行修改为:选择upa1.value作为用户名,upa2.value作为域
嘿,乔,谢谢你再次查看我的一个问题。。upa1用于撤回与别名匹配的valies。。upa2将用户名和域作为两个单独的行返回。感谢您的回答,非常感谢。。我不知道你可以用这样的条件语句。。我可能不得不寻找一种更快的方法,但我相信这会让我走上正轨。。