Многочисленные имеющие не работает
-
27-09-2019 - |
Вопрос
У меня есть база данных со следующей схемой:
ID PositeId LeagugeID 1 4 5 3 4 5 3 8 5 4 1 6
У меня есть этот запрос 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
Если я использую только левую сторону имеющего, т. Е.
HAVING sum(iif(lp.PositionId = 4,1,0)) > 1
Я получу 1 результаты (LeagugeID 5). Если я использую правую часть имеющего, т. Е.
HAVING sum(iif(lp.PositionId = 8,1,0)) > 0
Я также получу один результат (LeagugeID 5), но оба вместе (как указано выше) дают никаких результатов.
Решение
Ваша проблема заключается в том, что сумма не может удовлетворить как предикаты, поэтому попробуйте использовать или:
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
Другие советы
Вы не группируете позиционирование? Таким образом, для каждой позиции вы задаете сумму для того, чтобы позиционировать быть> 0, когда идентификатор 4 и 8 одновременно. Это возможно? Вы хотите или? Если вы используете другой запрос?
GROUP BY LeagueID
, например?
Вы можете написать много упрощенной версии этого запроса, например,
SELECT DISTINCT 8 AS PositionId
FROM Lineups
WHERE PositionId = 8
UNION ALL
SELECT DISTINCT 4
FROM Lineups
WHERE PositionId = 4
HAVING COUNT(*) > 1;