0

次のスキーマを持つデータベースがあります。

ID ポジションID リーグID
1 4 5
3 4 5
3 8 5
4 1 6

Access に次の SQL クエリがあります。

 SELECT lp.PositionId
 FROM Leagues l 
 INNER JOIN Lineups lp ON (l.LeagueID = lp.LeagueId) 
 GROUP BY PositionId
 HAVING sum(iif(lp.PositionId = 4,1,0)) > 1 AND sum(iif(lp.PositionId = 8,1,0)) > 0

Haveの左側のみを使用する場合、つまり:

 HAVING sum(iif(lp.PositionId = 4,1,0)) > 1

1 件の結果 (LeagueId 5) を取得します。私が持っているの右側を使用する場合、すなわち:

 HAVING sum(iif(lp.PositionId = 8,1,0)) > 0

1 つの結果 (LeagueId 5) も取得しますが、(上記のように) 両方を一緒に使用しても結果は得られません。

4

3 に答える 3

2

あなたの問題は、SUMが両方のHAVING述語を満たすことができないためです。したがって、ORを使用してみてください。

  SELECT lp.PositionId
    FROM Leagues l 
    JOIN Lineups lp ON (l.LeagueID = lp.LeagueId) 
GROUP BY PositionId
  HAVING SUM(iif(lp.PositionId = 4,1,0)) > 1 OR SUM(iif(lp.PositionId = 8,1,0)) > 0
于 2010-08-09T21:16:33.123 に答える
0

このクエリの非常に単純化されたバージョンを書くことができます。

SELECT DISTINCT 8 AS PositionId
  FROM Lineups 
 WHERE PositionId = 8 
UNION ALL
SELECT DISTINCT 4
  FROM Lineups 
 WHERE PositionId = 4
HAVING COUNT(*) > 1;
于 2010-08-10T13:28:57.557 に答える
0

positionidでグループ化していませんか?したがって、各位置 ID について、ID が同時に 4 と 8 の場合、その位置 ID の合計が >0 になるように求めています。これは可能ですか?ORが欲しいですか?別のクエリを使用する必要がありますか?

GROUP BY LeagueID、 例えば?

于 2010-08-09T21:11:26.410 に答える