不工作多Havings
-
27-09-2019 - |
题
我有以下模式的数据库:
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;
不隶属于 StackOverflow