Mysql - 使用值对合并两行

时间:2015-06-21 16:39:05

标签: mysql select join

我绝对不是MySQL忍者,而且我在同一张桌子中过滤和合并数据。

这是表格

user_id   |  profile_key  |  profile_value

2424      |  status       |  active
2424      |  channel      |  2345
3543      |  status       |  closed
3543      |  channel      |  2345 
...

我想过滤具有相同渠道价值且仅限活动行

的用户

我试过

SELECT user_id, profile_key, profile_value
FROM my_table

WHERE (
        (profile_key = 'channel' AND profile_value = '"2345"')
        AND
        (profile_key = 'status' AND profile_value = 'active')
      )

GROUP BY user_id

找不到行。 我想我错过了JOIN行部分,但我不确定如何在同一个表中实现它。 任何帮助将非常感激:)

1 个答案:

答案 0 :(得分:0)

您需要orgroup byhaving条款:

SELECT user_id, GROUP_CONCAT(profile_key), GROUP_CONCAT(profile_value)
FROM my_table
WHERE (profile_key = 'channel' AND profile_value = '2345') OR
      (profile_key = 'status' AND profile_value = 'active')
GROUP BY user_id
HAVING COUNT(DISTINCT profile_key) = 2;

HAVING子句确保您获得两场比赛。 GROUP_CONCAT()中的SELECT是因为每行对这些字段都有多个值(即2)。

根据您的示例数据,我也认为您不需要围绕数值的双引号。