MySQL选择value = 9'和'value = 3的位置

时间:2014-10-28 10:20:10

标签: mysql

我正试图从这张表中选择:

group_id    user_id
3           3
9           3
3           18
9           18
9           39
7           39

user_id,其中包含值3和9:

我想要的是什么:

group_id    user_id
3              3
9              3
3             18
9             18

我尝试了什么:

select * from prlg_pp_group_members where group_id IN (3,9);  

group_id    user_id
3           3
9           3
3           18
9           18
9           39

谢谢

1 个答案:

答案 0 :(得分:0)

我将在此处解释我的思考过程:

我首先编写了一个查询,它使用group_id为3或9来拉取所有行,并通过group_id和user_id将它们组合在一起。这确保没有重复的行(如3,3出现两次。)

这给了我们这个:

SELECT *
FROM myTable
WHERE group_id = 9 OR group_id = 3
GROUP BY group_id, user_id;

然后,您可以在user_id出现两次的情况下按user_id对该查询进行分组(这意味着它的group_id为3和9,因为我们已经过滤了这些条件。)在这个具体示例中,(9, 39)不会出现在最终结果集中,因为39不会出现两次。

查询如下所示:

SELECT user_id
FROM(SELECT *
    FROM myTable
    WHERE group_id = 9 OR group_id = 3
    GROUP BY group_id, user_id
    ) t
GROUP BY user_id
HAVING COUNT(*) = 2;

现在这里是首选项的来源:此查询仅返回user_id值。它不显示group_id值,但我们已经知道该值可以是子查询中的3和9。如果你想要那个值,你必须回到原始表并过滤3或9并检查user_id是IN子查询:

SELECT *
FROM myTable
WHERE (group_id = 9 OR group_id = 3)
  AND user_id IN(SELECT user_id
                FROM (SELECT *
                  FROM myTable
                  WHERE group_id = 9 OR group_id = 3
                  GROUP BY group_id, user_id
                ) t
                GROUP BY user_id
                HAVING COUNT(*) = 2);