n******1 发帖数: 3756 | 1 只针对Mysql
一般来说,都会建议将or 转成 union
但是如果情况是我有一千个or
比如
select id,name from student where id = id1 or id = id2 ...(1000个or)
如果转成
select id,name from student where id = id1
union
select id,name from student where id = id2
union
select id,name from student where id = id3
order by id (1000 个union)
这种情况下,哪个更好,id上有key
我觉得是union还是会好点,但是好像实际中感觉上第一种还快一点
遇到这种大量的or 应该怎么处理 |
B*****g 发帖数: 34098 | 2 起码也得用union all
【在 n******1 的大作中提到】 : 只针对Mysql : 一般来说,都会建议将or 转成 union : 但是如果情况是我有一千个or : 比如 : select id,name from student where id = id1 or id = id2 ...(1000个or) : 如果转成 : select id,name from student where id = id1 : union : select id,name from student where id = id2 : union
|
n******1 发帖数: 3756 | 3 但是如果要排重呢
【在 B*****g 的大作中提到】 : 起码也得用union all
|
B*****g 发帖数: 34098 | 4 你这哪里来的重
【在 n******1 的大作中提到】 : 但是如果要排重呢
|
n******1 发帖数: 3756 | 5 如果是理想情况确实应该不会有,但是我只是举的只是简单例子
我处理的是一些text mining的result,所以还是有可能不同ID,两个row内容有重复的
情况
不过我理解你的建议,谢谢
【在 B*****g 的大作中提到】 : 你这哪里来的重
|
B*****g 发帖数: 34098 | 6 其实你就是想问超过1000个不能用in怎么办,oracle里很简单,mysql我会把id存在一
个table里然后join
【在 n******1 的大作中提到】 : 如果是理想情况确实应该不会有,但是我只是举的只是简单例子 : 我处理的是一些text mining的result,所以还是有可能不同ID,两个row内容有重复的 : 情况 : 不过我理解你的建议,谢谢
|
t****n 发帖数: 10724 | 7 老师不会教这样的query的,显然两种方法都不好
【在 n******1 的大作中提到】 : 只针对Mysql : 一般来说,都会建议将or 转成 union : 但是如果情况是我有一千个or : 比如 : select id,name from student where id = id1 or id = id2 ...(1000个or) : 如果转成 : select id,name from student where id = id1 : union : select id,name from student where id = id2 : union
|
n******1 发帖数: 3756 | 8 oracle里面可以怎么做
mysql用join? 没理解
【在 B*****g 的大作中提到】 : 其实你就是想问超过1000个不能用in怎么办,oracle里很简单,mysql我会把id存在一 : 个table里然后join
|
B*****g 发帖数: 34098 | 9 create table t(id)
把id1-idxxxx都存进去
然后join student 和 t
for oracle, google "Split comma delimited string"
【在 n******1 的大作中提到】 : oracle里面可以怎么做 : mysql用join? 没理解
|
n******1 发帖数: 3756 | 10 真是很不错的思路,感觉你用临时表转换的思路很灵活,上次将列转行也是很巧妙的做法
你说oracle里面很容易是什么意思
【在 B*****g 的大作中提到】 : create table t(id) : 把id1-idxxxx都存进去 : 然后join student 和 t : for oracle, google "Split comma delimited string"
|
|
|
B*****g 发帖数: 34098 | 11 oracle sql 能把 delimited string直接转成table
做法
【在 n******1 的大作中提到】 : 真是很不错的思路,感觉你用临时表转换的思路很灵活,上次将列转行也是很巧妙的做法 : 你说oracle里面很容易是什么意思
|
c*********e 发帖数: 16335 | 12 select id,name from student where id in ( id1,id2,id3,.....)
【在 n******1 的大作中提到】 : 只针对Mysql : 一般来说,都会建议将or 转成 union : 但是如果情况是我有一千个or : 比如 : select id,name from student where id = id1 or id = id2 ...(1000个or) : 如果转成 : select id,name from student where id = id1 : union : select id,name from student where id = id2 : union
|
B*****g 发帖数: 34098 | 13 1000个or
【在 c*********e 的大作中提到】 : select id,name from student where id in ( id1,id2,id3,.....)
|
p*********d 发帖数: 136 | 14
How to do this, delimited string直接转成table in oracle sql?
Also where is the "1000" limitation specified?
【在 B*****g 的大作中提到】 : oracle sql 能把 delimited string直接转成table : : 做法
|
l********n 发帖数: 200 | 15 请问MSSQL能否把delimited string直接转成table?
【在 B*****g 的大作中提到】 : oracle sql 能把 delimited string直接转成table : : 做法
|
t****n 发帖数: 10724 | 16 beijing说说用什么方法?每次碰到列转行用cursor,麻烦死!
做法
【在 n******1 的大作中提到】 : 真是很不错的思路,感觉你用临时表转换的思路很灵活,上次将列转行也是很巧妙的做法 : 你说oracle里面很容易是什么意思
|
B*****g 发帖数: 34098 | 17 co-ask
【在 l********n 的大作中提到】 : 请问MSSQL能否把delimited string直接转成table?
|
B*****g 发帖数: 34098 | |
d**********3 发帖数: 1186 | 19 In term of the two options, OR is better in performance.
But I think you can pass a table variable to a proc, this should be optimal. |
d**********3 发帖数: 1186 | 20 You bet.
【在 l********n 的大作中提到】 : 请问MSSQL能否把delimited string直接转成table?
|
|
|
c*********e 发帖数: 16335 | 21 算法上没区别呀,如果table t有1000行,student table 有m行,那要比较1000m次。
【在 B*****g 的大作中提到】 : create table t(id) : 把id1-idxxxx都存进去 : 然后join student 和 t : for oracle, google "Split comma delimited string"
|
B*****g 发帖数: 34098 | 22 写法可以zb呀,哈哈
次。
【在 c*********e 的大作中提到】 : 算法上没区别呀,如果table t有1000行,student table 有m行,那要比较1000m次。
|
n******1 发帖数: 3756 | 23 不是吧
次。
【在 c*********e 的大作中提到】 : 算法上没区别呀,如果table t有1000行,student table 有m行,那要比较1000m次。
|
p***c 发帖数: 5202 | 24 没有直接的方法,我都是自己写了个table function
楼主的这么多or肯定不行,beijing说的建个temp table或者table variable(MSSQL)
然后join是正道
【在 l********n 的大作中提到】 : 请问MSSQL能否把delimited string直接转成table?
|