1

ダーツのスコアを維持するためのアプリケーションをプログラミングしています。私は次のようにリレーショナルデータベースを作成しました:

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
アンディ| 1
キース| 2

私は単純なSQLクエリに精通していますが、2人以上のプレーヤーがいて、DainonとAndyだけがプレイしたゲームなしで、プレーヤー(Andy)と対戦したプレーヤー(Dainon)がプレイしたゲームの数を取得する方法がわかりません。互いに対して。クエリの時点で、私はダイノンとアンディの両方のプレーヤー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)

ありがとう、私はあなたの援助に感謝します!

4

2 に答える 2

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
于 2012-09-12T23:11:35.007 に答える
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
于 2012-09-12T23:03:32.890 に答える