我绝对不是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行部分,但我不确定如何在同一个表中实现它。 任何帮助将非常感激:)
答案 0 :(得分:0)
您需要or
,group by
和having
条款:
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)。
根据您的示例数据,我也认为您不需要围绕数值的双引号。