求一条sql语句,万分紧急!

silinzi 2008-03-31 09:58:24
a表: 字段id 字符型 存的是1,2,3
id role_name
1 1,2,3
b表:
id name
1 你
2 我
3 他

要在a表显示的结果如下,sql语句该怎么写?
id role_name
1 你,我,他
...全文
209 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
codearts 2008-04-01
  • 打赏
  • 举报
回复
谁设计的这个表结构?

拉出去,毙了
许毕峰 2008-04-01
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080326/14/2e02f282-137c-44d3-a948-768ac2db9c95.html
看下这篇文章
heqi915 2008-04-01
  • 打赏
  • 举报
回复
友情UP
zfl2k 2008-04-01
  • 打赏
  • 举报
回复
用游标循环
首先取a表的role_name ,然后where b表.id in (role_name ),再循环组合成“你,我,他”
phillycat 2008-04-01
  • 打赏
  • 举报
回复
比较傻瓜的思路是:
1、写个split的函数通过符号分割字符串,网上代码很多;
create or replace function new_split (str in varchar2, delimiter in varchar2)....

2、循环串,
select new_split(name,',') into split_dataset from a;
j := 1;
len := split_dataset.count;
while j <= len
loop
select name into rp_name from b where id=split_dataset(j);

j := j+1;
v_sql := v_sql||rp_name;
end loop;
DBMS_OUTPUT.put_line(v_sql);
liuzi123 2008-04-01
  • 打赏
  • 举报
回复
关注下
minmin_god 2008-04-01
  • 打赏
  • 举报
回复
这是我上次帮别人用嵌套游标写的,你把里面的表与列换下,应该可以的
create or replace procedure prc_sxm1(err out varchar2) is
/************************
Ò»ÕÅ±í£¨¿¼ÇÚÐÅÏ¢±í£©
×ֶΣºÓû§id,ÈÕÆÚ£¬Ê±¼ä


±íÖÐµÄ ¾ßÌåÄÚÈÝΪ
µÚ¶þÌâ:
Ô­±í: °à¼¶ ѧºÅ
1 1
1 2
1 3
2 1
2 2
3 1
ת»»ºóµÄ: °à¼¶ ѧºÅ
1 1,2,3
2 1,2
3 1

declare
err varchar2(100);
begin
pro_sxm1(err);
dbms_output.put_line('error is'||err);
end;
select * from prc_sxm2
*************************/
cursor cur_get1 is
select distinct class from tt;
cursor cur_get2 is
select id,rq1 from tt;
v_sql varchar2(200);
v_err varchar2(200);
l integer;
i integer;
--v_sql:='';
cur_id cur_getid%rowtype;
cur_rq cur_getrq%rowtype;

BEGIN

open cur_getid;
open cur_getrq;

loop

fetch cur_getid into cur_id;
exit when cur_getid%notfound;

v_sql:=cur_id.id||' '||cur_id.rq1;--°ÑÓû§idÓëÈÕÆÚ·ÅÔÚÒ»Æð
fetch cur_getrq into cur_rq;

--Ñ­»·È¡µÃʱ¼ä
if (cur_rq.id=cur_id.id and cur_rq.rq1=cur_id.rq1 )
then
select count(*) into l from tt where tt.id=cur_id.id ;
for i in 1..l
loop
v_sql:=v_sql||' '||cur_rq.rq2;
fetch cur_getrq into cur_rq;
end loop;
end if;

DBMS_OUTPUT.put_line(v_sql);

end loop;
exception when others
then v_err :=sqlerrm;
err:=v_err;
--DBMS_OUTPUT.put_line(v_err);


END prc_sxm1;
phillycat 2008-04-01
  • 打赏
  • 举报
回复
光通过where b表.id in (a.role_name )的方法循环还会有问题,无法区分id=1和id=11等等情况,估计还是得把a.role_name split(,)出来再循环,oracle貌似还没有现成的函数,这个表结构谁设计的,纯粹折腾人啊!
tch16818 2008-03-31
  • 打赏
  • 举报
回复
没有太明白楼主的意思
onefours 2008-03-31
  • 打赏
  • 举报
回复
select a.id as a_id, t.role_name from (select t1.id || ','||t2.id || ',' ||t3.id as id, t1.role_name || ','|| t2.role_name || ',' || t3.role_name as role_name from b t1, b t2, b t3) t, a where t.id = a.role_name;

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧