gundumw100
gundumw100
采纳率0%
2009-09-05 17:05 阅读 274
已采纳

这样的SQL语句怎么写?

我要查一条数据比如id=20
现在我还要查出这条记录的上一条记录和下一条记录
怎么样用sql语句连接一次数据库就同时查出这3条记录?
[b]问题补充:[/b]
id不一定连续,有可能记录删除了呢?
[b]问题补充:[/b]
我现在用的查3次数据库的办法一条一条查,显然很落后!
先进点的办法没有?
[b]问题补充:[/b]
不能是这样的select * from 表名 where id in(20-1,20,20+1);,因为你不能确定上一条记录的id到底是什么,有可能删除过记录,那么这个时候id是18,22呢?
[b]问题补充:[/b]
我承认那样做可行,可语法太长了,万不得已也只能这样了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • 已采纳
    iteye_18964 iteye_18964 2009-09-07 18:01

    LZ你是用什么数据库?sql2005/mysql 下面是mysql的写法,先查询id=2的记录,在查询id2的最小id联合起来就得出你要的结果啦.sqlserver用top参照下面这种方案可以达到你的需求啊.
    SELECT * FROM 表 WHERE id=2
    UNION
    SELECT A.* FROM(SELECT * FROM 表 WHERE id UNION
    SELECT B.* FROM(SELECT * FROM 表 WHERE id>2 LIMIT 0,1) AS B

    点赞 评论 复制链接分享
  • iteye_10013 iteye_10013 2009-09-05 17:11

    id递增?

    点赞 评论 复制链接分享
  • walsh_bupt walsh_bupt 2009-09-05 17:33

    你的id连续吗,如果连续那就用in吧

    select *
    from 表名
    where id in(20-1,20,20+1);

    点赞 评论 复制链接分享
  • iteye_10013 iteye_10013 2009-09-05 18:30

    那还有其他字段么?如时间那样的递增的字段.

    点赞 评论 复制链接分享
  • iteye_10013 iteye_10013 2009-09-05 18:33

    如果没有,那除非像oracle那样有rowid之类的系统字段,否则应该是没办法了

    点赞 评论 复制链接分享
  • walsh_bupt walsh_bupt 2009-09-05 19:00

    不知道楼主说的不连续多不,如果不超过5%,那建议还是用IN吧。

    点赞 评论 复制链接分享
  • iteye_18964 iteye_18964 2009-09-06 13:49

    楼主你可以这样查询啊
    SELECT * FROM 表 WHERE id=2
    UNION
    SELECT A.* FROM(SELECT * FROM 表 WHERE id UNION
    SELECT B.* FROM(SELECT * FROM 表 WHERE id>2 LIMIT 0,1) AS B

    点赞 评论 复制链接分享
  • dragondml dragondml 2009-09-07 14:53

    select * from 表名 where id in(20-1,20,20+1);

    点赞 评论 复制链接分享

相关推荐