作者diamondking (迷惘)
看板Database
标题Re: [SQL ] 选取特定主键跟其下一笔之外的资料
时间Wed Jun 25 21:53:59 2008
※ 引述《JYHuang (夏天到了,冷不起来了说)》之铭言:
: 再将starjou兄的语法做延伸
: 选出table中指定 id 值和其上下一笔的资料
: SELECT A.id FROM news AS A LEFT JOIN
: (SELECT id FROM news WHERE id >=
: (select IFNULL(max(id),10) from news where id <10 )
: ORDER BY id LIMIT 3) AS B
: ON A.id = B.id WHERE B.id IS NULL
: 在一个有16笔资料的资料表中查询
: 花费0.0005 秒(一般查询 约0.0003 sec)
其实解法很简单耶@@:
假设你的目标id是Q (某数字)
则:
1、选出Q及Q的上一笔和下一笔资料:
select * from news where ABS(id-Q)<=1
2、选出Q及其上下一笔「以外」的资料:
select * from news where ABS(id-Q)>1
3、选出Q及其下一笔「以外」的资料:
select * from news where id<Q or id>(Q+1)
4、选出Q及其上一笔「以外」的资料:
select * from news where id>Q or id<(Q-1)
都是一行解决…
ps. ABS函数就是取其绝对值...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.139.138
1F:推 JYHuang:当id有间断时,就不行了吧? 06/25 22:13
2F:→ diamondking:如果不连续,Oracle有rownum,mysql看来真的没有简单的 06/25 22:20
3F:推 chph:SELECT id FROM news WHERE id < N ORDER BY id DESC LIMIT 1 06/25 22:53
4F:推 chph:改个条件与排序, 再union all 这样呢? 推文等好久.. 囧 06/25 22:57
5F:→ diamondking:这版推文要等2xx秒实在是太扯了= = 06/26 00:05
6F:推 starjou:推完一句可以去念几遍大悲咒再回来 06/26 00:10