楼主: 4pal

[精华] 一个sql

[复制链接]
论坛徽章:
0
31#
发表于 2002-7-25 15:36 | 只看该作者
to  biti_rainy


收到了,同意。

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
32#
发表于 2002-7-25 16:58 | 只看该作者

Re: 所以要这样呀!

最初由 rfeng 发布
[B]所以要在from子句中的test改换成

(select distinct * from test)

的呀!


结果就是这样的哦:

select name

from (select distinct * from test)

where number not in (1,3,5)
group by name
having count(distinct number)=3

恩,差不多就这样了! :)

[/B]


再罗嗦一句:
group by中已经使用了distinct, 就不必使用flying view了, 影响效率
distinct是比较耗时的操作, 考虑这个例子中聚组之后的row很少, 才这样写,  当然具体优化还是要检查执行路径

sql实现是一个思路, 真正应用效率又是一个思路, 不一样的

使用道具 举报

回复
论坛徽章:
4
会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2006-05-19 12:39:15行业板块每日发贴之星
日期:2006-11-17 01:08:18
33#
发表于 2002-7-25 17:19 | 只看该作者

thanks !

很感谢 easyfree 的指正,不才是新手,在sql上的语言逻辑上稍微知道些,在工程经验和优化上面还很薄弱,以后见教的时候很多哦,先在此谢过easyfree 喽 ! :)

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
34#
发表于 2002-7-28 17:03 | 只看该作者
select a.name from test a, test b, test c where a.name= b.name and a.name=c.name
and a.number = 1 and b.number = 2 and c.number=5

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
35#
发表于 2002-7-28 17:16 | 只看该作者

大家都不看前提

楼主提问的时候就说了

不使用表连接

使用道具 举报

回复
论坛徽章:
8
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44奥运会纪念徽章:马术
日期:2008-08-07 13:19:27奥运会纪念徽章:沙滩排球
日期:2008-08-13 08:47:462010年世界杯参赛球队:巴西
日期:2010-02-12 11:48:16ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31
36#
发表于 2002-7-31 16:02 | 只看该作者
为什么不用intersact呢?

使用道具 举报

回复
论坛徽章:
70
三菱
日期:2014-01-17 10:00:292014年世界杯参赛球队: 智利
日期:2014-06-05 11:54:32马上加薪
日期:2014-04-07 17:03:21马上有钱
日期:2014-02-25 21:39:36马上加薪
日期: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:14马上有车
日期:2014-02-18 16:41:11
37#
发表于 2002-7-31 20:26 | 只看该作者
最初由 MountLion 发布
[B]为什么不用intersact呢? [/B]

这样的sql实现不是问题,怎样做高效才是问题哦

使用道具 举报

回复
论坛徽章:
0
38#
发表于 2002-8-1 16:20 | 只看该作者

(Re: 我刚想批判yangtingkun )有关case的疑问?

最初由 easyfree 发布
[B]以貌取人, tt就自报家门了,  

decode在oracle中属于另类函数, 但非常有效, 是解决许多问题的关键, 建议专门看看,  记得以前有本oracle sql技巧的书专门有一章就叫: <<令人惊奇的decode>>,  惊奇可能是过了些, 但有效倒是真的
当然它的缺点不是没有, 一是需要枚举, 二是对等于有用,对于大于小于就很麻烦, 好在8i之后引入了case,  许多问题就迎刃而解了 [/B]

case?8i是怎么支持case的?我一直没有查到,能否请tt说明一下。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
39#
发表于 2002-8-6 08:57 | 只看该作者

关于distinct的重复问题

关于rfeng所说的distinct使用上,由于前面使用的SQL语句在执行时好象已经屏蔽掉了重复的使用,所以应该

不需要再使用distinct。不知道我说的对不对?请各位试一下。

我在试验后发现,
SQL> select nnn from test group by nnn having (sign(sum(decode(num,1,-1,0)))+sig
n(sum(decode(num,3,-1,0)))+sign(sum(decode(num,5,-1,0)))<=-3);
在这句中不管使不使用distinct,其效果都是一样的,不知道是什么原因?请各位指教一下

使用道具 举报

回复
论坛徽章:
70
三菱
日期:2014-01-17 10:00:292014年世界杯参赛球队: 智利
日期:2014-06-05 11:54:32马上加薪
日期:2014-04-07 17:03:21马上有钱
日期:2014-02-25 21:39:36马上加薪
日期: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:14马上有车
日期:2014-02-18 16:41:11
40#
发表于 2002-8-6 09:03 | 只看该作者
这句话自然不用distinct
distinct会多一个排序的操作。
而且会降低首行记录的响应时间。如果可以不用,当然不用。

使用道具 举报

回复

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

本版积分规则 发表回复

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