Множественные владения не работают - PullRequest
0 голосов
/ 10 августа 2010

У меня есть база данных со следующей схемой:

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), но оба вместе (как выше) не дают результатов.

Ответы [ 3 ]

2 голосов
/ 10 августа 2010

Ваша проблема в том, что SUM не может удовлетворить оба предиката HAVING, поэтому попробуйте использовать ИЛИ:

  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 голосов
/ 10 августа 2010

Вы можете написать значительно упрощенную версию этого запроса, например

SELECT DISTINCT 8 AS PositionId
  FROM Lineups 
 WHERE PositionId = 8 
UNION ALL
SELECT DISTINCT 4
  FROM Lineups 
 WHERE PositionId = 4
HAVING COUNT(*) > 1;
0 голосов
/ 10 августа 2010

Разве вы не группируете по позиционированию? Таким образом, для каждого positionid вы запрашиваете сумму для этого positionid, равную> 0, когда id равен 4 AND 8 одновременно. Это возможно? Вы хотите ИЛИ? Если вы используете другой запрос?

GROUP BY LeagueID, например?

...