我有以下模式的数据库:

ID   PositionId    LeagueId
1        4            5
3        4            5
3        8            5
4        1            6

我有这样的SQL查询在Access:

 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

如果我只用有,即左侧:

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

我将得到1次的结果(LeagueId 5)。如果我使用有,即右侧:

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

我也将获得一个结果(LeagueId 5),但两者一起(如上面)产生任何结果。

有帮助吗?

解决方案

您的问题是,因为总和不能满足两者都具有谓词,所以尽量使用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

其他提示

你是不是由positionid分组?因此,对于每个positionid你问的是positionid为0的总和>当ID是在同一时间4和8。这可能吗?你想一个OR?如果您是使用不同的查询?

GROUP BY LeagueID,例如

可以写的这个查询e.g另一个具有更加简化的版本。

SELECT DISTINCT 8 AS PositionId
  FROM Lineups 
 WHERE PositionId = 8 
UNION ALL
SELECT DISTINCT 4
  FROM Lineups 
 WHERE PositionId = 4
HAVING COUNT(*) > 1;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top