有如下的5字段表
序列号(该字段的值唯一) 字段A 字段B 字段C 字段D
.......................................................
1 3 4 5 6
2 4 5 6 7
3 5 6 7 8
4 6 7 8 9
.......................................................现在我期望能实现的功能是:
能否用语句查找出同时出现过(5,6)的记录
当然对于以上的数据应该返回的结果是:
序列号(该字段的值唯一) 字段A 字段B 字段C 字段D
.......................................................
1 3 4 5 6
2 4 5 6 7
3 5 6 7 8
.......................................................但对于未知数据集的情况下该语句该如何写哪??
重点是我不知道这些要求的条件(5,6)究竟会在哪个字段位置上出现
序列号(该字段的值唯一) 字段A 字段B 字段C 字段D
.......................................................
1 3 4 5 6
2 4 5 6 7
3 5 6 7 8
4 6 7 8 9
.......................................................现在我期望能实现的功能是:
能否用语句查找出同时出现过(5,6)的记录
当然对于以上的数据应该返回的结果是:
序列号(该字段的值唯一) 字段A 字段B 字段C 字段D
.......................................................
1 3 4 5 6
2 4 5 6 7
3 5 6 7 8
.......................................................但对于未知数据集的情况下该语句该如何写哪??
重点是我不知道这些要求的条件(5,6)究竟会在哪个字段位置上出现
解决方案 »
- 初学Oracle的简单问题
- 急求 oracle spatial 空间数据库查询速度优化问题
- Oracle Developer 2000 怎样屏蔽报表列印功能?
- oracle函数的使用问题
- 重做日志文件
- 如何算出今天到去年的4月1号总共有多少天
- 為什麼我沒插網線的時候TNS服務無法啟動,而插上網線就可以了呢/
- 怎样才能够查到应用程序死锁了哪个表???
- 用网络蚂蚁在ORACLR的网站下载,下载前两个没问题,为什么下载第三个总提示SetEndOfFile(112)的错误,然后下载中断?
- 请大家帮我看看这个触发器那里有错误
- 如何使用Veritas NetBackup工具进行oracle数据库的备份和恢复
- Oracle8i中基于多字段的左连接或右连接问题
select * from Table where (col1=5 and (col2=6 or col3=6 or col4=6)) or (col2=5 and (col1=6 or col3=6 or col4=6)) or (col3=5 and (col1=6 or col2=6 or col4=6)) or (col4=5 and (col2=6 or col3=6 or col41=6))
首先,select serial_no,col_A||col_B||col_C from this_table;
然后,在此结果中用字符串函数找出既有‘5’又有‘6’的serial_no
应该就是你想要的了吧。
条件写成下边的样子
decode(col1,5,1,decode(col1,6,10,0))+decode(col2,5,1,decode(col2,6,10,0))+decode(col3,5,1,decode(col3,6,10,0))+decode(col4,5,1,decode(col4,6,10,0))=11
>这个方法确实能实现,但毫无可扩展性
>我这里只有4个比较字段和2个条件,这样的到还可以枚举出来
>但如过是6个比较字段,而条件要求有其中内容同时满足4个值也
>....当数据E-R关系都没定时,千万不要期望SQL语句是万能的,可扩展的。对于所说的如果字段增加,条件增加这种情况,我不相信能写出一行SQL语句来高效的实现之而且还能应付所需要的扩展性,因为很显然,索引的创建以及动态维护已经成为整个系统的瓶颈了,除非你只是在做'数据挖掘',并且不担心查询的效率。说得更直接一点,当有类似这样的查询请求时,数据库的设计者更需要注重的是E-R关系的设计,而不是绞尽脑汁被动地写SQL。要支持可扩展,唯一可行的办法是写存储过程。
换种思路,可以想想使用触发器,在执行insert和update后立刻判断新加入的一行是否满足条件,然后把其抄写到临时表中,这样可以直接获得答案,不过负面影响也较严重--事务处理会有所减慢,如果目标表上没有集中式的批量数据处理就可以采用这种办法。
首先感谢你的提议,但这种方法会把结果集扩,例如:
字段A 字段B
55 66
当出现这种情况的时候使用"||"方法就会产生不少的错误数据.to tangtangno1(糖糖)
首先感谢你的提议
这种方法比枚举法看起来清晰不少.
但是你的条件好象有问题哦!
decode(col1,5,1,decode(col1,6,10,0))+decode(col2,5,1,decode(col2,6,10,0))+decode(col3,5,1,decode(col3,6,10,0))+decode(col4,5,1,decode(col4,6,10,0))=11 应该还有:
decode(col1,5,1,decode(col1,6,10,0))+decode(col2,5,1,decode(col2,6,10,0))+decode (col3,5,1,decode(col3,6,10,0))+decode(col4,5,1,decode(col4,6,10,0))in(11,12,22,13,21)
可能还有....to Hewwatt(Hewwatt)
首先感谢你的批评,我虚心接受.
不过用户难免会有对系统的期望值过高的时候,
我们能做的也不是完全满足用户而是尽量满足.