2012-09-12 62 views
1

我正在编写一个应用程序来保持飞镖得分。我创建了如下的关系数据库:SQL如何从关系数据库中的游戏获取玩家VS玩家游戏数量

GameInformation gameId | numberOfPlayer | totalInnings | gameType
0 | 2 | 13 | 0
1 | 2 | 14 | 0
2 | 2 | 20 | 0
3 | 3 | 16 | 0

PlayersByGame gameId | playerId |局| | mpr
0 | 0 | 13 | 1.538
0 | 1 | 13 | 1.651
1 | 0 | 14 | 1.500
1 | 1 | 14 | 2.012
2 | 0 | 20 | 1.658
2 | 2 | 20 | 2.123
3 | 2 | 16 | 2.001
3 | 1 | 16 | 1.325
3 | 0 | 16 | 1.001

玩家
姓名| Id
Dainon | 0
Andy | 1
Keith | 2

我熟悉简单的SQL查询,但并不确定如何获取玩家(Dainon)在没有超过2名玩家的游戏时与玩家(安迪)只有戴安和安迪互相对抗。在查询时,我有Dainon和Andy的球员ID。

任何人都可以提供任何有关如何编写SELECT语句来做到这一点。

我已经开始与错误的查询,如下列:

SELECT * FROM PlayersByGame WHERE playerId LIKE 0 and playerId LIKE 1; 


SELECT gameId, numberOfPlayers, totalInnings, gameType 
FROM GameInformation 
WHERE (numberOfPlayers = 2) 
UNION 
SELECT gameId, playerId, innings, mpr 
FROM PlayersByGame 
WHERE (playerId = 0) 
UNION 
SELECT gameId, playerId, innings, mpr 
FROM PlayersByGame AS PlayersByGame_1 
WHERE (playerId = 1) 

谢谢你,我很欣赏你的任何援助!

回答

1

试试这个。 点击她Sqlfiddle版本

select count(*) as NumOfGames 
from 
(
select gameid,count(*) 
from 
(
    select gameId,playerId 
    from PlayersByGame 
    where gameId in 
    (
     SELECT gameId from GameInformation 
     where numberOfPlayer =2 
    ) 
    AND 
    playerId in 
    (
     select id from Players 
     where Name in('Dainon','Andy') 
    ) 
) as A 
group by A.gameId 
having count(*) =2 
) as B 
+0

Nico,这很好用!精确测试的SQL SELECT语句如下: SELECT COUNT(gi。游戏ID)AS表达式1 FROM GameInformation AS GI INNER JOIN PlayersByGame AS PBG1 ON pbg1.gameId = gi.gameId AND pbg1.playerId = 0 INNER JOIN PlayersByGame AS PBG2 ON pbg2.gameId = gi.gameId AND pbg2.playerId = 1 WHERE(gi.numberOfPlayers = 2) – Dainon

+0

我很高兴它的工作,不要犹豫,upvote我的回答:) – nico

1

我会尝试类似的东西(未测试)

SELECT count(gi.id) 
FROM GameInformation gi 
JOIN PlayersByGame pbg1 ON pbg1.gameId=gi.id AND pbg1.playerId = {idPlayer1} 
JOIN PlayersByGame pbg2 ON pbg2.gameId=gi.id AND pbg2.playerId = {idPlayer2} 
WHERE gi.numberOfPlayer = 2 
+0

Nico,那很好用! 确切测试SQL SELECT语句如下: SELECT COUNT(gi.gameId)AS表达式1 FROM GameInformation AS GI INNER JOIN PlayersByGame AS PBG1 ON pbg1.gameId = gi.gameId AND pbg1.playerId = 0 INNER JOIN PlayersByGame AS pbg2 ON pbg2.gameId = gi.gameId AND pbg2.playerId = 1 WHERE(gi.numberOfPlayers = 2) – Dainon