查看: 9733|回复: 28

请教查询语句的写法?

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2005-10-12 12:24 | 显示全部楼层 |阅读模式
table T,列:serial_no
我想能够查询一下serial_no这个字段的不连续的值。
例如:
serial_no
1
2
3
4
6
8
9
10
我想一个sql语句查出来缺失的号码,
显示结果为:
5
7
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2005-10-12 12:48 | 显示全部楼层
再建一個表﹐給它連續的值﹗
兩個表一連接就實現了﹗

使用道具 举报

回复
论坛徽章:
24
授权会员
日期:2005-11-02 09:11:312010年世界杯参赛球队:朝鲜
日期:2010-04-07 16:41:242010广州亚运会纪念徽章:垒球
日期:2010-10-12 10:55:382010世博会纪念徽章
日期:2010-10-12 11:16:472010广州亚运会纪念徽章:现代五项
日期:2011-03-07 10:53:21鲜花蛋
日期:2011-06-09 14:33:36双黄蛋
日期:2011-07-01 13:24:04茶鸡蛋
日期:2011-08-05 08:57:45蜘蛛蛋
日期:2011-08-26 09:10:28ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2005-10-12 12:54 | 显示全部楼层
最初由 wwwyao 发布
[B]再建一個表﹐給它連續的值﹗
兩個表一連接就實現了﹗ [/B]


同意,只要找到找到在新表中的ID在旧表中没有的就可以了

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
 楼主| 发表于 2005-10-12 12:57 | 显示全部楼层
表很大,不能建立另外一个表!

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
 楼主| 发表于 2005-10-12 13:03 | 显示全部楼层
这个表里还有其他的字段,这个序号是依托与这些字段联合组成的主键,这个字段本身是能够重复的。而且这个表是一个流水表,数据量在千万级别,所以只想采用一个语句能够查询出来不连续的也就是丢失的纪录。谢谢

使用道具 举报

回复
认证徽章
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2005-10-12 13:10 | 显示全部楼层
cursor吧!

使用道具 举报

回复
认证徽章
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
发表于 2005-10-12 13:17 | 显示全部楼层
最初由 hhd_1976 发布
[B]表很大,不能建立另外一个表! [/B]


不用创建一个表,再增加一个字段怎么样?

使用道具 举报

回复
论坛徽章:
44
双鱼座
日期:2016-01-07 20:57:31奔驰
日期:2013-08-02 22:22:552013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-01-29 22:12:11蛋疼蛋
日期:2013-01-07 15:50:53ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28紫蛋头
日期:2011-07-31 11:27:01蜘蛛蛋
日期:2011-06-14 14:20:33蛋疼蛋
日期:2011-06-03 19:39:27SQL大赛参与纪念
日期:2011-04-13 12:08:17
发表于 2005-10-12 13:20 | 显示全部楼层
最初由 warehouse 发布
[B]

不用创建一个表,再增加一个字段怎么样? [/B]

增加一个字段也是没有用的呀

使用道具 举报

回复
认证徽章
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
发表于 2005-10-12 13:26 | 显示全部楼层
最初由 mychary 发布
[B]
增加一个字段也是没有用的呀 [/B]


呵呵,是啊,我也发现增加字段是不行的!

使用道具 举报

回复
认证徽章
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2005-10-12 13:35 | 显示全部楼层
Cool!!!!!!!!
原来可以这么解的
[php]
SELECT   /*+ordered */
         T2.serial_no + 1, MIN (t3.serial_no) - 1
    FROM T T1, T T2, T t3
   WHERE T1.serial_no(+) = (T2.serial_no + 1) AND T1.serial_no IS NULL
         AND t3.serial_no > T2.serial_no
GROUP BY T2.serial_no




……。。。。
[/php]
解决思路:
1。用not exists /not in  ,条件 : t1.serial_no = t2.serial_no + 1

2。参考http://www.itpub.net/406784.html , 将not exists /not in  改为outer join + is null 格式

3。加上 min 条件,确定上下限

有空再列出详细步骤

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表