我正在尝试从我的android sqlite数据库中选择数据。我有3个桌子 - 桌面玩家(所有玩家的列表),表格匹配(所有匹配的列表)和表格PlayersMatches(每个匹配中的玩家列表,创建多对多的关系)。我想编写SELECT命令,它返回所有匹配,其中两个玩家一起玩。这是一个小例子:
Table PLAYERS
-------------
id name
1 John
2 Jamie
3 Joe
Table MATCHES
-------------
id date
1 17/12/01
2 17/12/02
3 17/12/03
Table PLAYERS_MATCHES
---------------------
id id_Player id_Match
1 1 1
2 2 1
3 1 2
4 3 2
5 1 3
6 2 3
所以,我想编写select命令,返回所有匹配,其中扮演John(1)和Jamie(2)。结果应该是:
SELECT RETURNED
-------------
id_match
1
3
请注意,每场比赛可以有超过2名球员。
可以编写单个sql命令,或者我应该以不同的方式执行它? (例如,为第一个玩家选择命令,为第二个玩家选择另一个,在Android过滤器中以编程方式匹配)。
答案 0 :(得分:1)
在单个sql中完成它是完全可以的。这是为SQL构建的查询类型。
你在PlayerMatches表上执行self join,如:
SELECT distinct M1.id_match
From PLAYERS_MATCHES M1 CROSS JOIN PLAYERS_MATCHES M2
WHERE M1.id_match=M2.id_match AND M1.id_player=1 AND M2.id_player=2
验证
sqlite> select * from matches;
id p m
---------- ---------- ----------
1 1 1
2 2 1
3 1 2
4 3 2
5 1 3
6 2 3
sqlite>
sqlite> select distinct m1.m from matches m1 cross join matches m2
...> where m1.m=m2.m and m1.p=1 and m2.p=2;
m
----------
1
3
sqlite>