MySQL:选择战斗列表,不在2个用户之间共享

时间:2015-04-28 07:28:16

标签: mysql sql

我需要选择" battle_id"的列表,首先是" user_id"有,但不与第二个" user_id",

共享

战斗(表结构):

;4836;

输入和输出样本:

id     user_id     battle_id
0         1           44
1         1           55
2         1           66
3         2           44
4         2           77
5         3           88
6         3           99
7         4           44
8         4           55
9         4           66

感谢,

2 个答案:

答案 0 :(得分:1)

示例数据:

CREATE TABLE t
    (`id` int, `user_id` int, `battle_id` int)
;

INSERT INTO t
    (`id`, `user_id`, `battle_id`)
VALUES
    (0, 1, 44),
    (1, 1, 55),
    (2, 1, 66),
    (3, 2, 44),
    (4, 2, 77),
    (5, 3, 88),
    (6, 3, 99),
    (7, 4, 44),
    (8, 4, 55),
    (9, 4, 66)
;

<强>查询:

select
battle_id
from
t
group by battle_id
having sum(user_id = 1) >= 1 and sum(user_id = 2) = 0

<强>结果:

| battle_id |
|-----------|
|        55 |
|        66 |

<强>解释

您不需要像评论中建议的那样自我加入。一气呵成 user_id = 'whatever'子句中sum()函数内的having返回truefalse,表示10

答案 1 :(得分:1)

您可以在此处使用子查询。这样的事情: -

SELECT battle_id
FROM battles
WHERE user_id IN ('Your first user_id', 'Your second user_id')
AND battle_id NOT IN (SELECT battle_id
                      FROM battles
                      WHERE user_id = 'Your second user_id');