0

我有一个具有以下架构的数据库:

ID PositionId LeagueId
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

我也会得到一个结果(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

你不是按positionid分组的吗?因此,对于每个 positionid,当 id 同时为 4 和 8 时,您要求该 positionid 的总和 > 0。这可能吗?你想要手术室吗?你应该使用不同的查询吗?

GROUP BY LeagueID, 例如?

于 2010-08-09T21:11:26.410 回答
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 回答