Múltiples havings no trabajan
-
27-09-2019 - |
Pregunta
Tengo una base de datos con el siguiente esquema:
ID PositionId LeagueId 1 4 5 3 4 5 3 8 5 4 1 6
Tengo esta consulta SQL en 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
Si sólo uso el lado izquierdo de la Tener, es decir:
HAVING sum(iif(lp.PositionId = 4,1,0)) > 1
voy a conseguir resultados (1 LeagueId 5). Si uso el lado derecho de la Tener, es decir:
HAVING sum(iif(lp.PositionId = 8,1,0)) > 0
I también tendrá un resultado (LeagueId 5), pero ambos juntos (como anteriormente) no da resultados.
Solución
Su tema es porque la suma no puede satisfacer tanto a los predicados que tienen, por lo que trate de usar un 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
Otros consejos
No es usted la agrupación por positionid? Así que para cada positionid que está pidiendo la suma para que sea positionid> 0 cuando el id es 4 Y 8 al mismo tiempo. es posible? ¿Quieres un quirófano? Si está utilizando una consulta diferente?
GROUP BY LeagueID
, por ejemplo?
Se puede escribir una versión muy simplificada de esta consulta por ejemplo.
SELECT DISTINCT 8 AS PositionId
FROM Lineups
WHERE PositionId = 8
UNION ALL
SELECT DISTINCT 4
FROM Lineups
WHERE PositionId = 4
HAVING COUNT(*) > 1;