oracle一个字段多个值的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle一个字段多个值的问题相关的知识,希望对你有一定的参考价值。

现在一张表如同
id grayid
1 1,2
2 2,3
3 3,5
现在我要查出grayid包含1,2,3之间的任何一个的所有结果
形如一个人有管理员1的角色,又有管理员2的角色,其它人也是如此有多个角色,现要查出拥有管理员1、管理员2、管理员3角色中的任何一个角色的所有人员————

你的 grayid 里面, 最大的数字是多少? 不超过10 的话. 用 caozhimeng1 那个 like 一下就好。

超过10的话, 也就是会有 1,11,12,23 这样的话。
那就要换个函数了。

也就是
WHERE
INSTR( ',' || grayid || ',' , ',1,' ) >0
OR INSTR( ',' || grayid || ',' , ',2,' ) >0
OR INSTR( ',' || grayid || ',' , ',3,' ) >0

注: 上面是 Oracle 的写法。
如果是 SQL Server , 把 || 修改为 + , 把 INSTR 修改为 CHARINDEX, 然后参数先后顺序换一下。追问

这样不行的,我的grayid有很多。,而且在人员表中的角色字段也有不定多个角色ID,不可能都一一 列出来的

追答

你查询出来的是 多行 id? 还是 查询出来 1,2,3 ?

如果是 多行 id.
那就表关联一下。

SELECT
main.*
FROM
一张表 main JOIN ( 你的那个查询多个角色ID的子查询 ) t
ON (
INSTR( ',' || main.grayid || ',' , ',' || t.查询出来的角色ID || ',' ) >0
)

参考技术A select * from tabName where grayid like '%,1,%' or grayid like '%,2,%' or grayid like '%,3,%' or
grayid like '1,%' or grayid like '2,%' or grayid like '3,%' or
grayid like '%,1' or grayid like '%,2' or grayid like '%,3' or
grayid in ('1','2','3');
参考技术B select * from tabName where grayid like '%1%' or grayid like '%2%' or grayid like '%3%'追问

我的目标角色ID也是通过查出来的一组值,是不可能一一列出来的,这样肯定是行不通的

追答

那你就用存储过程吧

先查询角色,然后循环查询出来的角色列表,根据角色编码去查询管理员,把查询出来的管理员放在一张临时表中
然后输出临时表

来自:求助得到的回答
参考技术B xc

Oracle -- 多个count统计一张表中多个字段等于某值

摘录:https://www.linuxidc.com/Linux/2012-06/62894.htm

case when 条件 then 条件为真时的值 else 条件为假时的值 end

--单独查询统一某个字段等于某值的次数
select count(m.underwriteflag) from prpcmain m where m.underwriteflag=\'1\'  ; --720407
select count(m.nationflag) from prpcmain m where m.nationflag=\'1\'         --720422

--合并查询 select count(case when m.underwriteflag=\'1\' then 1 end)字段1,count(case when m.nationflag=\'1\' then 1 end)字段2 from prpcmain m;

  

 

以上是关于oracle一个字段多个值的问题的主要内容,如果未能解决你的问题,请参考以下文章

oracle中怎么取某个字段值的前面数据

oracle数据库中给字段加默认值的问题

oracle中两张表中的两个字段值的模糊比对

Oracle -- 多个count统计一张表中多个字段等于某值

sql 当中 如何查询某个字段中的值的第几个字符中含有相应的值

sql 怎么删除一个字段的一个值