在同一个字段内如何查询不同位置的值?
 现在[b]部门关系存到了同一个字段内[/b],共有6层,分别用[b]逗号隔开[/b],部门的层级依次降低,能根据前一个值查询后一个值吗?

[img]http://dl.iteye.com/upload/attachment/0073/1149/ac09aec9-ad02-3974-80d3-5b788181b206.png[/img]

[code="sql"]
select column_SecondValue from table_name where column_firstValue ='参数'
[/code]

5个回答

个人建议,该字段不该这么设计,关系应该拉出来作为实体。
我很疑惑,关系数据在更新的时候,你们是怎么做的。

yang649459172
yang649459172 建了一个视图,问题解决了
大约 8 年之前 回复
surelei
surelei 我觉得一楼的方法是可以的,还有一种方式,为了查询简单,可以建一个view,在view里把关系数据拆分成不同字段。然后么,就好办了。
大约 8 年之前 回复
yang649459172
yang649459172 这个数据库不是我们做的,现在是做报表要用到,要查出部门
大约 8 年之前 回复

我的理解是:一个字段存放很多值,都以逗号形式分割
如果能查询到这条记录,那么还有什么查询不到的
例如:
select column_SecondValue from table_name where column_firstValue like'123123415646123%'
这样查询到所有 column_firstValue like 和传入值匹配的字段了

yang649459172
yang649459172 但是这个参数就是前一列的值啊,还是有点不明白?
大约 8 年之前 回复

String sql="select column_SecondValue from table_name where column_SecondValue like'123123415646123%' ";
Listlist=方法返回上个sql的结果级
for循环遍历这个字段
后台代码做split(",");分割这个字段的值,
split(",")[0]部门第1个
split(",")[1]部门第2个

如果你要根据这个列的第一个值去查第二个值的话,sql里面可以用字符串截取的。

比如oracle里面可以用substr和instr结合实现,
1.column_firstValue可以这样截取
[code="sql"]
substr(t.col1, 0, instr(t.col1, ',') - 1)
[/code]
2.column_SecondValue就要截第一个逗号和第二个逗号之间的,所以要从第一个逗号之后的那个位置instr(t.col1, ',') + 1开始截,截第二个和第一个之间的那个长度instr(t.col1, ',', 1, 2) - instr(t.col1, ',') - 1,所以最后可以这样截取
[code="sql"]
substr(t.col1,
instr(t.col1, ',') + 1,
instr(t.col1, ',', 1, 2) - instr(t.col1, ',') - 1)
[/code]

3.所以最后由第一个值去查第二个值可以这样:
[code="sql"]
select t.col1,
substr(t.col1,
instr(t.col1, ',') + 1,
instr(t.col1, ',', 1, 2) - instr(t.col1, ',') - 1) column_SecondValue。
from table_name t
where substr(t.col1, 0, instr(t.col1, ',') - 1) = '参数';
[/code]

其他的也可以依此类推。。。

liuyinhuan0409
liuyinhuan0409 后面如果要由第二个查第三个等等,也是一样的做法,稍微改一下各自截取的开始位置和长度就好了
大约 8 年之前 回复
liuyinhuan0409
liuyinhuan0409 最后就是这样: select t.col1, substr(t.col1, instr(t.col1, ',') + 1, instr(t.col1, ',', 1, 2) - instr(t.col1, ',') - 1) column_SecondValue from table_name t where substr(t.col1, 0, instr(t.col1, ',') - 1) = '参数';
大约 8 年之前 回复
liuyinhuan0409
liuyinhuan0409 select t.col1, substr(t.col1, instr(t.col1, ',') + 1, instr(t.col1, ',', 1, 2) - instr(t.col1, ',') - 1) column_SecondValue from table_name t where substr(t.col1, 0, instr(t.col1, ',') - 1) = '参数';
大约 8 年之前 回复

这谁设计的狗屎表。这样设计一点层次感也没有。怎么搜索?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐