ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 5936|回复: 28

请教查询语句的写法? [复制链接]

注册会员

中级会员

精华贴数
0
技术积分
524
社区积分
0
注册时间
2004-2-20
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2005-10-12 12:24:40 |显示全部楼层
table T,列:serial_no
我想能够查询一下serial_no这个字段的不连续的值。
例如:
serial_no
1
2
3
4
6
8
9
10
我想一个sql语句查出来缺失的号码,
显示结果为:
5
7

注册会员

中级会员

精华贴数
0
技术积分
266
社区积分
56
注册时间
2005-5-27
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2005-10-12 12:48:51 |显示全部楼层
再建一個表﹐給它連續的值﹗
兩個表一連接就實現了﹗

使用道具 举报

注册会员

恋家的男人

精华贴数
0
技术积分
1695
社区积分
626
注册时间
2004-6-4
论坛徽章:
23
授权会员
日期:2005-11-02 09:11:312010年世界杯参赛球队:朝鲜
日期:2010-04-07 16:41:242010广州亚运会纪念徽章:垒球
日期:2010-10-12 10:55:382010世博会纪念徽章
日期:2010-10-12 11:16:472012新春纪念徽章
日期:2012-01-04 11:49:542010广州亚运会纪念徽章:现代五项
日期: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:282010新春纪念徽章
日期:2010-03-01 11:20:082010年世界杯参赛球队:英格兰
日期:2010-01-06 10:26:37
发表于 2005-10-12 12:54:00 |显示全部楼层
最初由 wwwyao 发布
[B]再建一個表﹐給它連續的值﹗
兩個表一連接就實現了﹗ [/B]


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

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
524
社区积分
0
注册时间
2004-2-20
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2005-10-12 12:57:44 |显示全部楼层
表很大,不能建立另外一个表!

使用道具 举报

注册会员

中级会员

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

使用道具 举报

版主

版主

精华贴数
11
技术积分
33853
社区积分
3863
注册时间
2001-10-18
论坛徽章:
109
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-01-04 11:49:54灰彻蛋
日期:2011-12-17 23:16:55数据库板块每日发贴之星
日期:2011-03-16 01:01:02月度精华徽章
日期:2011-04-01 02:15:44SQL数据库编程大师
日期:2011-04-13 12:09:01现任管理团队成员
日期:2011-05-07 01:45:08蜘蛛蛋
日期:2011-10-18 13:05:40季节之章:夏
日期:2011-10-21 12:00:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41紫蛋头
日期:2012-01-06 21:49:51ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
发表于 2005-10-12 13:10:59 |显示全部楼层
cursor吧!

使用道具 举报

版主

自由职业

精华贴数
10
技术积分
27102
社区积分
2318
注册时间
2002-8-16
论坛徽章:
105
蓝锆石
日期: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紫水晶
日期:2008-12-05 14:34:05红宝石
日期:2009-01-17 14:54:36
发表于 2005-10-12 13:17:17 |显示全部楼层
最初由 hhd_1976 发布
[B]表很大,不能建立另外一个表! [/B]


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

使用道具 举报

注册会员

高级会员

精华贴数
0
技术积分
7531
社区积分
214
注册时间
2003-9-18
论坛徽章:
28
数据库板块每日发贴之星
日期:2005-07-12 01:01:25生肖徽章2007版:龙
日期:2009-08-15 14:06:312010新春纪念徽章
日期:2010-03-01 11:20:002010年世界杯参赛球队:希腊
日期:2010-03-18 08:46:352010广州亚运会纪念徽章:田径
日期:2010-10-04 00:13:502010广州亚运会纪念徽章:举重
日期:2010-10-09 16:31:592010广州亚运会纪念徽章:曲棍球
日期:2011-02-23 20:38:102010广州亚运会纪念徽章:棒球
日期:2011-03-15 19:29:342010广州亚运会纪念徽章:棒球
日期:2011-04-12 12:12:00SQL大赛参与纪念
日期:2011-04-13 12:08:17蛋疼蛋
日期:2011-06-03 19:39:27蜘蛛蛋
日期:2011-06-14 14:20:33
发表于 2005-10-12 13:20:33 |显示全部楼层
最初由 warehouse 发布
[B]

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

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

使用道具 举报

版主

自由职业

精华贴数
10
技术积分
27102
社区积分
2318
注册时间
2002-8-16
论坛徽章:
105
蓝锆石
日期: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紫水晶
日期:2008-12-05 14:34:05红宝石
日期:2009-01-17 14:54:36
发表于 2005-10-12 13:26:51 |显示全部楼层
最初由 mychary 发布
[B]
增加一个字段也是没有用的呀 [/B]


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

使用道具 举报

版主

版主

精华贴数
11
技术积分
33853
社区积分
3863
注册时间
2001-10-18
论坛徽章:
109
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-01-04 11:49:54灰彻蛋
日期:2011-12-17 23:16:55数据库板块每日发贴之星
日期:2011-03-16 01:01:02月度精华徽章
日期:2011-04-01 02:15:44SQL数据库编程大师
日期:2011-04-13 12:09:01现任管理团队成员
日期:2011-05-07 01:45:08蜘蛛蛋
日期:2011-10-18 13:05:40季节之章:夏
日期:2011-10-21 12:00:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41紫蛋头
日期:2012-01-06 21:49:51ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
发表于 2005-10-12 13:35:30 |显示全部楼层
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文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部