0

ここに私の元のクエリがありました:

SELECT Batting.playerID, SUM(G) as 'G', SUM(AB) as 'AB', SUM(R) as 'R', SUM(H) as 'H', SUM(Doub) as '2B',  SUM(Trip) as '3B', 
                         SUM(HR) as 'HR', SUM(RBI) as 'RBI', SUM(SB) as 'SB', SUM(CS) as 'CS', SUM(BB) as 'BB', 
                         SUM(SO) as 'SO', SUM(IBB) as 'IBB', SUM(HBP) as 'HBP', SUM(SH) as 'SH', SUM(SF) as 'SF', SUM(GIDP) as 'GIDP', 
                         Master.nameLast, Master.nameFirst, 
    FROM Batting
        JOIN Master ON Batting.playerID = Master.playerID

WHERE Master.nameLast LIKE @lastname + '%' 
GROUP BY Batting.playerID, Master.nameLast, Master.nameFirst

ここに私の新しいクエリがあります:

SELECT Batting.playerID, SUM(G) as 'G', SUM(AB) as 'AB', SUM(R) as 'R', SUM(H) as 'H', SUM(Doub) as '2B',  SUM(Trip) as '3B', 
                         SUM(HR) as 'HR', SUM(RBI) as 'RBI', SUM(SB) as 'SB', SUM(CS) as 'CS', SUM(BB) as 'BB', 
                         SUM(SO) as 'SO', SUM(IBB) as 'IBB', SUM(HBP) as 'HBP', SUM(SH) as 'SH', SUM(SF) as 'SF', SUM(GIDP) as 'GIDP', 
                         Master.nameLast, Master.nameFirst, Fielding.POS
    FROM Batting
        JOIN Master ON Batting.playerID = Master.playerID
        JOIN Fielding ON Master.playerID = Fielding.playerID
WHERE Master.nameLast LIKE @lastname + '%' 
AND Fielding.POS IN ('C', '1B','2B','3B', 'SS', 'LF', 'RF', 'CF', 'OF', 'DH')
GROUP BY Batting.playerID, Master.nameLast, Master.nameFirst, Fielding.POS

私がしているのは、フィールディング テーブルから pos 列を追加することだけです。合計を取得するには、バッティング テーブルのすべての列を合計する必要がありました。一部の結果では、合計に関連する守備テーブルに複数の POS があります。つまり、誰かが 1 つのポジションで 50 試合を行い、別のポジションで別の 50 試合を持っている場合です。私のクエリは機能しますが、返される数値は途中で数倍になり (最初のクエリよりも 2 番目のクエリの方がはるかに大きくなります)、pos に基づいて複数のレコードを取得しています。何かご意見は?左外部結合を試みましたが、何もしませんでした

4

2 に答える 2

0

問題は、テーブル内の 1 つのレコードがMasterテーブル内に複数のレコードを持つ可能性がFieldingあることです。これにより、クエリがBattingテーブル内の各レコードを複数回返すことになります。テーブルからのデータが必要な場合は、FieldingplayerID ごとに 1 つのレコードに制限する必要があります。

于 2013-05-09T15:43:59.153 に答える
0

行の乗算を回避するには、2 つの個別のクエリを実行し、UNION ALL とマージする必要があります。

  • の一つBatting JOIN Master
  • 他のオンFielding JOIN Master
于 2013-05-09T15:48:35.013 に答える