1

我不知道如何措辞这个问题,但它更容易解释。

如果我有一个看起来像这样的表:

+-------+----------+--------+
| 用户 | 结果 | 水平 |
+-------+----------+--------+
| 1 | 胜利 | 1 |
| 1 | 胜利 | 2 |
| 1 | 胜利 | 3 |
| 2 | 胜利 | 1 |
| 2 | 击败 | 2 |
| 3 | 击败 | 1 |
| 4 | 击败 | 1 |
| 5 | 击败 | 1 |
+-------+----------+--------+

我希望能够只选择在第 3 级获胜的“用户”。所以选择会返回:

+-------+----------+--------+
| 用户 | 结果 | 水平 |
+-------+----------+--------+
| 1 | 胜利 | 1 |
| 1 | 胜利 | 2 |
| 1 | 胜利 | 3 |
+-------+----------+--------+

其他人不会因为没有完成第 3 关而被退回。

非常感谢!我希望我解释清楚。

4

2 回答 2

5

如果您只想知道哪些用户在第 3 关获胜:

SELECT User FROM my_table WHERE Result = 'Victory' AND Level = 3

但是,如果(如您所示)您想要所有这些用户的结果(感谢@Andomar 和@ConradFrix 在下面的评论):

SELECT DISTINCT m1.*
FROM   my_table AS m1
  JOIN my_table AS m2 USING (User)
WHERE  m2.Result = 'Victory'
   AND m2.Level  = 3
于 2012-05-30T22:06:55.943 回答
3

您可以使用一个exists子句,例如:

select  *
from    scores s
where   exists
        (
        select  *
        from    scores vl3
        where   vl3.user = s.user
                and vl3.Result = 'Victory'
                and vl3.Level >= 3
        )
于 2012-05-30T22:21:45.453 回答