查看: 1324|回复: 13
|
SQL 求助~~~
[复制链接]
|
|
我有一个table test, 有两个attributes: index, condition
eg,
index condition
1 a
1 b
3 a
我要找出同样的index,condition=a 和condition = b
eg. index = 1, condition =a and condition =b
我现在这样写
SELECT index FROM test WHERE (condition IN ('a', 'b')) GROUP BY ISBN HAVING COUNT(index)=2
可是我觉得这样不是很好,请问有没有什么更好办法?(condition可能会更多,eg. condition=a,b,c,d...)
[ 本帖最后由 CoLoUrGhOsT 于 2-12-2006 01:05 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 4-12-2006 01:38 AM
|
显示全部楼层
就是说你要select在同样的condition下,index有两个相同的? |
|
|
|
|
|
|
|
发表于 9-12-2006 01:37 AM
|
显示全部楼层
SELECT index FROM test WHERE condition IN (select distinct condition from test) GROUP BY ISBN HAVING COUNT(index)=2 |
|
|
|
|
|
|
|

楼主 |
发表于 10-12-2006 12:50 AM
|
显示全部楼层
一个相同的index同时拥有两个不同的condition.
这两个condition在database里是不在同一排的,会是两排
eg:
index condition
1 a
1 b
原帖由 hui_wooi 于 4-12-2006 01:38 AM 发表
就是说你要select在同样的condition下,index有两个相同的? |
|
|
|
|
|
|
|

楼主 |
发表于 10-12-2006 12:51 AM
|
显示全部楼层
原帖由 microSys 于 9-12-2006 01:37 AM 发表
SELECT index FROM test WHERE condition IN (select distinct condition from test) GROUP BY ISBN HAVING COUNT(index)=2
这就是我想到的方法。。。上面写了。。。请问有没有有别的方法? |
|
|
|
|
|
|
|
发表于 11-12-2006 12:58 PM
|
显示全部楼层
疑问
原帖由 CoLoUrGhOsT 于 10-12-2006 12:51 AM 发表
这就是我想到的方法。。。上面写了。。。请问有没有有别的方法?
1. 楼主没说 WHERE (condition IN ('a', 'b')) 的 search criteria 是不是dynamic pass in 还是搜寻所有的出现在test table的data.
2.
SELECT INDEX FROM test WHERE condition IN (SELECT DISTINCT condition FROM test) GROUP BY ISBN HAVING COUNT(INDEX)=2
和
SELECT INDEX FROM test GROUP BY ISBN HAVING COUNT(INDEX)=2
的结果是一样的, 但peformance 不一样. |
|
|
|
|
|
|
|

楼主 |
发表于 12-12-2006 07:47 PM
|
显示全部楼层
原帖由 悠哉亭 于 11-12-2006 12:58 PM 发表
1. 楼主没说 WHERE (condition IN ('a', 'b')) 的 search criteria 是不是dynamic pass in 还是搜寻所有的出现在test table的data.
2.
SELECT INDEX FROM test WHERE condition IN (SELECT DISTINCT co ...
是dynamic pass in 的, 所以,可能会是condition IN ('a', 'b')或condition IN ('a', 'b', 'c')或condition IN ('a')等等。 |
|
|
|
|
|
|
|
发表于 14-12-2006 12:01 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 15-12-2006 01:27 PM
|
显示全部楼层
原帖由 悠哉亭 于 14-12-2006 12:01 PM 发表
呵呵..dynamic 的condition. 
除了 store procedure 或 function, 其他的我觉得不合适.
如果, condition 在 in list 里不是很多, 比如少过50个及有适宜的索引, 我个人觉得你的sql是合适的.
你可以参考 ...
谢谢你。
可是假如index 1 的condition 有a, b, c而我的seacrh in 是('a,', 'b'),他会连index 1 也找出来。。。
除了store procedure and function 纯粹sql不能做到吗?
那个url我开不到。。。 |
|
|
|
|
|
|
|
发表于 15-12-2006 02:59 PM
|
显示全部楼层
可是假如index 1 的condition 有a, b, c而我的seacrh in 是('a,', 'b'),他会连index 1 也找出来。。。
啊? 你的问题好象不一样了ler.
假定 table data:
index condition
1 a
1 b
1 c
3 a
是不是如果,
search condition 有2个 eg. ('a','b'):
index reult
(no record found)
search condition 有3个 eg. ('a','b','c'):
index result
1
除了store procedure and function 纯粹sql不能做到吗?
那个url我开不到。。。
试试这个URL:
http://asktom.oracle.com
click-> Popular
click-> How can I do a variable "in list"
[ 本帖最后由 悠哉亭 于 15-12-2006 03:02 PM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 21-12-2006 01:37 AM
|
显示全部楼层
原帖由 悠哉亭 于 15-12-2006 02:59 PM 发表
啊? 你的问题好象不一样了ler.
假定 table data:
index condition
1 a
1 b
1 c
3 a
是不是如果,
search condition 有2个 eg. ('a ...
对了!对了!我就是这个意思。不好意思,我的表达能力很差。。。 |
|
|
|
|
|
|
|

楼主 |
发表于 8-1-2007 06:58 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 9-1-2007 01:16 PM
|
显示全部楼层
回复 #12 CoLoUrGhOsT 的帖子
SELECT INDEX, CONDITION , ISBN FROM TEST A
WHERE A.condition IN ('a', 'b')
AND EXISTS (SELECT 1
FROM TEST B
WHERE A.INDEX=B.INDEX
AND A.ISBN=B.ISBN HAVING COUNT(INDEX) = 2)
AND EXISTS (SELECT 1 FROM TEST C
WHERE A.INDEX=C.INDEX
AND A.ISBN=C.ISBN
AND C.condition IN ('a', 'b')
HAVING COUNT(INDEX) = 2);
('a', 'b'), COUNT(INDEX) = 2 是 dynamic 的.
不知ISBN在那里来的?
不过, 我还是建议你用 store procedure.  |
|
|
|
|
|
|
|

楼主 |
发表于 25-1-2007 11:22 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|