【发布时间】:2018-03-10 03:45:37
【问题描述】:
我已将所有的 DDL 和查询放在下面的 sqlfiddel 链接中
http://sqlfiddle.com/#!9/89c76/2
同样的事情
create table players(name varchar(32),playerid int);
insert into players values("a",1);
insert into players values("b",2);
insert into players values("c",3);
insert into players values("d",4);
insert into players values("e",5);
insert into players values("f",6);
select * from players;
create table matches(playerid int,game varchar(32));
insert into matches values(1,"game1");
insert into matches values(2,"game1");
insert into matches values(3,"game1");
insert into matches values(1,"game2");
insert into matches values(2,"game2");
insert into matches values(3,"game2");
insert into matches values(4,"game3");
insert into matches values(5,"game2");
select * from matches;
commit;
--This will give same players playing different games
select playerid,game
from matches
group by 1,2
现在说我想列出所有不玩给定游戏的玩家,比如 game1
- 如果玩家 1 正在玩游戏 1 和游戏 2,则不应返回,因为他还在 与其他游戏一起玩 game1,在本例中,它应该返回玩家 4 和 5
- 如果有玩家没有玩任何游戏在这种情况下玩家 6,也应该返回 作为结果的一部分。
这是我的疑问:
select * from players
where playerid not in (
select playerid from matches m
where m.game = 'game1') /* 4,5,6*/
select * from players
where playerid not in (
select playerid from matches m
where m.game = 'game2') /*4,6*/
select * from players
where playerid not in (
select playerid from matches m
where m.game = 'game3') /*1,2,3,5,6*/
如何在一个查询中查询所有游戏?可以有许多类型的游戏。我无法明确指定游戏。相反,我想编写查询来获取所有没有为每个游戏玩游戏的playerids,如下所示:
select * from players
where playerid not in (
select playerid from matches m
group by game)
上面的查询只给出一条记录。我需要这样的
Result:
------------------------
game1 | 4,5,6
------------------------
game2 | 4,6
------------------------
game3 | 1,2,3,5,6
------------------------
....
我能够解决这个问题,发布解决方案,以便对其他人有用
select p.playerid,m.game
from players p, (select distinct game from matches) m
where p.playerid not in (select playerid from matches where game=m.game)
我得到了正确的结果。可以进一步改进吗?
【问题讨论】:
-
我删除了不兼容的数据库标签。你应该解释你想做什么,提供样本数据和期望的结果。
-
是的,我已经把所有需要的数据和输出连同 cmets,请检查内联 cmets
-
请浏览 cmets,我已经解释了一切以及工作示例
-
我需要一个 for 循环之类的东西来获取每个游戏的信息
-
非常感谢 APC 格式化帖子
标签: sql