3

だから私はを使用してクエリを実行する方法を知っていますNOT EXIST。しかし、代わりに使用する同等のものを見つけることができないようですCOUNT

構造:

player(playerID: integer, playerName: string)
team(teamID: integer, teamName: string, sport: string)
plays(playerID: integer, teamID: integer)

NOT EXIST私が思いついたクエリは次のとおりです。

SELECT distinct player.playerID, playerName
FROM player, plays
WHERE NOT EXISTS
    (SELECT teamID
     FROM team
     WHERE sport='football' AND NOT EXISTS
           (SELECT teamID
           FROM plays
           WHERE team.teamID=plays.teamID AND player.playerid=plays.playerid));

このクエリは、すべてのサッカー チームでプレーする選手を検索します。カウントを使用して同じことをしようとしています。まず、サッカーがスポーツの下に表示される回数をカウントする必要があることを知っています。次に、そのプレーヤーはTeamID、スポーツがサッカーであるすべての 's でプレーする必要があります。この後混乱します。ヒントはありますか?

4

2 に答える 2

1
  1. すべてのサッカー チームの ID を取得します。

    SELECT teamID
    FROM team
    WHERE sport = 'football'
    
  2. 特定のプレーヤーがプレーしたすべてのチームの ID を取得します。

    SELECT TeamID
    FROM plays
    WHERE playerID = @playerID
    
  3. 前者から後者を除外する

    SELECT teamID
    FROM team
    WHERE sport = 'football'
    
    EXCEPT
    
    SELECT TeamID
    FROM plays
    WHERE playerID = @playerID
    
  4. 結果に行がないかどうかを確認します。

    NOT EXISTS (
        SELECT teamID
        FROM team
        WHERE sport = 'football'
    
        EXCEPT
    
        SELECT TeamID
        FROM plays
        WHERE playerID = @playerID
    )
    
  5. すべてのプレーヤーに条件を適用します。

    SELECT playerID, playerName
    FROM player
    WHERE
        NOT EXISTS (
            SELECT teamID
            FROM team
            WHERE sport = 'football'
    
            EXCEPT
    
            SELECT TeamID
            FROM plays
            WHERE playerID = player.playerID
        )
    ;
    
于 2013-08-01T11:52:31.837 に答える