代码之家  ›  专栏  ›  技术社区  ›  dfilkovi

MySQL查询获取兄弟姐妹

  •  0
  • dfilkovi  · 技术社区  · 16 年前

    我需要一个查询,它将在某个ID之前获取一个项目,在同一个ID之后获取一个项目。

    例如,我有五行,ID是1到5,我需要在ID 3之前和之后选择ID,这样我得到2和4作为结果。

    有没有一种方法可以用一个查询来完成它?

    编辑:

    我忘了告诉你结果可能不是兄弟姐妹而是下一个符合标准的兄弟姐妹:

    SELECT routeId FROM routes WHERE routeId>::p0:: AND assetKmId<>'0'
    

    因此,下一个或上一个同级应与assetkmid<>'0'匹配(此routeid>::p0::在此方案中当然无效)

    3 回复  |  直到 16 年前
        1
  •  1
  •   Gabriel Solomon    16 年前

    为什么不使用max、min和union结果

    SELECT min(routeId) FROM routes WHERE routeId>::p0:: AND assetKmId<>'0' 
    UNION 
    SELECT max(routeId) FROM routes WHERE routeId<::p0:: AND assetKmId<>'0'
    
        2
  •  0
  •   Tamas Mezei    16 年前

    这不管用吗?

    SELECT * FROM :tablename
    WHERE id = :yourid - 1 OR id = :yourid + 1
    

    当然,您应该在查询中设置表名和ID参数。

        3
  •  0
  •   Tom Bartel    16 年前

    提炼所罗门比的解决方案以返回完整的记录,而不是仅返回ID(以防对您有任何用处):

    SELECT * 
      FROM routes 
     WHERE routeId = (select min(routeId) from routes where routeId >::p0::)
       AND assetKmId <> '0' 
    UNION 
    SELECT *
      FROM routes 
     WHERE routeId = (select max(routeId) from routes where routeId<::p0::) 
       AND assetKmId<>'0'