代码之家  ›  专栏  ›  技术社区  ›  Kris B

多个having不起作用

  •  0
  • Kris B  · 技术社区  · 15 年前

    我有一个具有以下架构的数据库:

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

    我在Access中有以下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个结果(联赛5)。如果我用右手,即:

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

    我也会得到一个结果(联赛5),但两者加在一起(如上所述)不会产生任何结果。

    3 回复  |  直到 15 年前
        1
  •  2
  •   onedaywhen    15 年前

    您的问题是因为SUM不能同时满足两个谓词,所以请尝试使用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
    
        2
  •  0
  •   Tobiasopdenbrouw    15 年前

    你不是按职位ID分组吗?因此,对于每个positionid,您要求positionid的总和为>当id同时为4和8时为0。这可能吗?你想要手术室吗?您应该使用不同的查询吗?

    GROUP BY LeagueID

        3
  •  0
  •   onedaywhen    15 年前

    您可以编写这个查询的简化版本,例如。

    SELECT DISTINCT 8 AS PositionId
      FROM Lineups 
     WHERE PositionId = 8 
    UNION ALL
    SELECT DISTINCT 4
      FROM Lineups 
     WHERE PositionId = 4
    HAVING COUNT(*) > 1;
    
    推荐文章