最近遇到很变态的问题,某字段与另一表有字段关联关系,单位这字段存放的值是多个以逗号隔开的ID,改如何处理的问题,网上搜了下遇到此问题的人还挺不少,给一网友的问题整理了一下,转过来学习一下:
表a:
a_usr_id(字符串型,关联表b的usr_id)
123,124,125
表b:
usr_id , usr_name,
123 name1
124 name2
125 name3
直接用用sql语句,不用存储过程如何取得这样的数据集合:
name1,name2,name3
解决方案:
SQL> select * from test;
A_URS_ID
--------------------------------------------------
123,125
123,124,125
SQL> select * from test1;
URS_ID URS_NAME
---------- --------------------
123 name1
124 name2
125 name3
SQL> with split_data as (
select key, rn, substr(str, instr(str, ',', 1, rn)+1,
instr(str, ',', 1, rn+1) - instr(str, ',', 1, rn) - 1) str
from (select a_urs_id key, ','||a_urs_id||',' str from test) a,
(select rownum rn from dual connect by rownum < 10) b
where instr(str, ',', 1, rn+1) > 0 )
select key, substr(max(sys_connect_by_path(urs_name, ',')), 2) a_name
from split_data a, test1 b
where a.str = b.urs_id
start with rn = 1
connect by key = prior key and rn-1 = prior rn
group by key;
KEY A_NAME
-------------------- ------------------------------------------------------------
123,124,125 name1,name2,name3
123,125 name1,name3
附原文地址: http://www.oracle.com.cn/viewthread.php?tid=75324
另参考: http://www.233.com/oracle/zonghe/20110704/161631965.html
分享到:
相关推荐
oracle 某列存儲的值是有逗號的字符串,希望通過逗號分隔開來顯示多行。sql,有預期結果,有項目實戰。
Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常有用,例如在报表生成、数据分析和数据整合等场景中。 在 ...
oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现
总结来说,Oracle字段根据逗号分割查询数据的方法利用了正则表达式和层次查询,提供了灵活且精确的解决方案。通过理解这些技术,我们可以有效地处理存储在单个字段中的分隔值查询。同时,也应关注其潜在的性能影响,...
该函数主要对oracle 中数据表中存在的多选字典值进行翻译
如果需要同时添加多个字段,可以在`ADD`后面列出多个字段定义,用逗号隔开: ```sql ALTER TABLE test1 ADD (name VARCHAR2(30) DEFAULT 'prg' NOT NULL, age INTEGER DEFAULT 22 NOT NULL, has_money NUMBER(9,2))...
在MySQL数据库中,经常遇到需要处理以逗号分隔的字段值的情况,这些字段通常用于存储多值数据,比如在本例中,`related_shop_ids`字段存储了多个商店ID,用逗号分隔。本篇文章将详细讲解如何将这样的字段拆分成多个...
Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为“1,2,3,5”,字段B为“2”。 想获取两个字段的交集(相同值)2,获取两个字段的差集(差异值)1,3,5。 一、最终实现的sql语句 1、获取交集(相同值)...
那么,现在如果给出一个权限编号,要去检索出用后这个权限的用户集合,就会需要在逗号分隔的多个权限编号中去匹配给出的这个权限编号。如果使用like去做,一则效率不高,二则匹配不精确。因此用到了逗号分隔列转行的...
在这个例子中,`[^,]+`是一个正则表达式,表示匹配任何非逗号字符的一个或多个实例。参数`1, LEVEL`是指从字符串的第1个字符开始,按层级提取子字符串,这里的`LEVEL`随着层次查询递增。 2. **REPLACE**: `...
某天客户有一个需求,给定一批的手机号码或者电话号码,查询出相关的通话记录,以及相关的一些信息。 客户给定的被叫号码如图所示: 查询出来的结果如下图所示(本批次的结果不是上图导入的结果查询的,为了格式...
与SQL中的`||`运算符不同的是,`WM_CONCAT`可以接受多个参数并将它们连接起来形成一个单一的字符串,特别适用于需要合并多个列值的情况。此函数通常用于返回一个由指定的列或表达式组成的列表,其中每个元素之间可以...
添加字段的语法:alter table tablename add (column datatype [default value][null...添加、修改、删除多列的话,用逗号隔开。 使用alter table 来增加、删除和修改一个列的例子。 创建表结构:create table test1(id
wmsys.wm_concat将字段的值用”,”来隔开。 select id,wm_concat(name) from tab_name group by id; 二、使用sys_connect_by_path sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用...
1. **准备TXT文件**:整理TXT文件,确保每一行代表一条记录,每个字段之间用分隔符隔开。如果数据中包含特殊字符,如逗号、引号等,可能需要进行转义处理。 2. **创建Oracle表**:在Oracle数据库中创建一个与TXT...
说明: (如果值为 TRUE) 当在隐式转换中丢失数据时返回错误的参数。 值范围: FALSE | TRUE 默认值: TRUE nls_numeric_characters: 说明: 指定将用作组分隔符和小数位的字符。组分隔符就是用来分隔整数位组 (如千, ...
- 将多个字符串连接成一个字符串,中间用逗号隔开。 示例: ```sql SELECT wm_concat(name) FROM table_name; ``` **7. `initcap(a)`** 此函数用于转换字符串的大小写格式。 - 将字符串中的每个单词的首字母...
`GROUPING SETS`的语法结构清晰,`list`表示需要分组的列序列,通过逗号分隔,多个`list`之间用括号和逗号隔开。如果需要包含所有级别的汇总,可以添加一个空的`(NULL)`分组集。`GROUPING_ID`函数可以用来标识当前行...
同时添加多个字段,只需将每个字段定义用逗号隔开即可: ```sql alter table test1 add (name varchar2(30) default '无名氏' not null, age integer default 22 not null, has_money number(9,2)); ``` 接下来是...