我需要选择" 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
感谢,
答案 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
返回true
或false
,表示1
或0
。
答案 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');