MySQL查询获取兄弟姐妹

时间:2009-11-27 10:32:43

标签: mysql

我需要一个查询,它会在某个Id之前获取单个项目,并在同一个Id之后获取一个项目。

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

有没有办法用一个查询来完成它?

编辑:

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

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

所以下一个或上一个兄弟应该匹配assetKmId&lt;&gt;'0'(此routeId&gt; :: p0 ::当然在这种情况下无效)

3 个答案:

答案 0 :(得分:1)

为什么不使用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'

答案 1 :(得分:0)

这不会起作用吗?

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

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

答案 2 :(得分:0)

改进solomongaby的解决方案,以返回完整记录而不仅仅是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'