有2张表,表结构如下
表名meetinginfo
meetingid varchar 50 主键 (会议ID)
meetingname varchar 50 (会议名)
createrid varchar 50 (发起人ID)
joinid varchar 50 (参与者ID) 表名userinfo
userid varchar 50 主键 (用户ID)
username varchar 50 (用户名) 表meetinginfo中数据如下
"m1" "ParmentMeeting" "vk001" "vk002,vk003"
"m2" "GloabMeeting" "CEO001" "vk001,tk001" 表userinfo中数据如下
"CEO001" "张三"
"vk001" "李四"
"vk002" "王五"
"vk003" "钱六"
"tk001" "许七" 现在要实现以下结果:
"m1" "ParmentMeeting" "李四" "王五,钱六" 我想了好久,不知道怎么写,请高手帮忙
表名meetinginfo
meetingid varchar 50 主键 (会议ID)
meetingname varchar 50 (会议名)
createrid varchar 50 (发起人ID)
joinid varchar 50 (参与者ID) 表名userinfo
userid varchar 50 主键 (用户ID)
username varchar 50 (用户名) 表meetinginfo中数据如下
"m1" "ParmentMeeting" "vk001" "vk002,vk003"
"m2" "GloabMeeting" "CEO001" "vk001,tk001" 表userinfo中数据如下
"CEO001" "张三"
"vk001" "李四"
"vk002" "王五"
"vk003" "钱六"
"tk001" "许七" 现在要实现以下结果:
"m1" "ParmentMeeting" "李四" "王五,钱六" 我想了好久,不知道怎么写,请高手帮忙
create table meetinginfo (
meetingid varchar(50),
meetingname varchar(50),
createrid varchar(50),
joinid varchar(50)
)
create table userinfo (
userid varchar(50),
username varchar(50)
)
insert meetinginfo select 'm1', 'ParmentMeeting', 'vk001', 'vk002,vk003'
union all select 'm2', 'GloabMeeting', 'CEO001', 'vk001,tk001' insert userinfo select 'CEO001','张三'
union all select 'vk001','李四'
union all select 'vk002','王五'
union all select 'vk003','钱六'
union all select 'tk001','许七'create function fun(@userid varchar(200))
returns varchar(2000)
as
begin
declare @re varchar(2000)
set @re=''
select @re=@re+','+username from userinfo
where charindex(userid, @userid)>0return(stuff(@re, 1, 1, ''))
endselect meetingid, meetingname,
createrid=dbo.fun(createrid),
joinid=dbo.fun(joinid)
from meetinginfo--result
meetingid meetingname createrid joinid
-------------------------------------------------- -------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
m1 ParmentMeeting 李四 王五,钱六
m2 GloabMeeting 张三 李四,许七(2 row(s) affected)
如果要查询也只能是建函数来处理了,比如说建一个changetoname函数用来转换
这个函数的功能用来关联user表并且解析id,将id转换成name后再拼串,函数写完后
最后的查询应该如下
select meetingid,changetoname(createrid),changetoname(joinid)
from meetinginfo
from meetinginfo a , userinfo b, ( select c1.userid||','||c2.userid userids, c1.username||','||c2.username usernames from userinfo c1, userinfo c2) c
where a.createrid = b.userid
and a.joinid = c.userids
SQL> select * from meetinginfo;MEETINGID MEETINGNAM CREATERID JOINID
-------------------- ---------- ---------- ------------------------------
m1 PM vk001 vk002,vk003
m2 GM CE001 vk001,tk001SQL> select meetingid,meetingname,f_h(joinid) aa from meetinginfo;MEETINGID MEETINGNAM AA
-------------------- ---------- ------------------------------
m1 PM 王五,钱六
m2 GM 李四,许七create or replace function f_h(arg_res in varchar2) return varchar2
is
namelist varchar2(1100);
sss varchar2(30);
i number;
j number;
aa varchar2(1000);
begin
i:=0;
j:=1;
aa:=arg_res||','; loop
j:= instr(aa,',',i+1);
EXIT WHEN j=0;
sss := substr(aa,i+1,j-i-1);
select username into sss from userinfo where userid=sss;
namelist :=namelist||','||sss;
i:=j;
end loop;
namelist:=substr(namelist,-(length(namelist)-1));
return(namelist);
end f_h;
String sql = "select * from meetinginfo ";
ResultSet rs=st.executeQuery(sql);
ArrayList al = new ArrayList();
while (rs.next())
{
MeetinginfoBean mbean = new MeetinginfoBean();
String joinid =rs.getString("joinid ");
mbean.set(rs.getString("joinid ");
.............
al.add(mbean);
)
rs.close();
for(int i=0;i<al.size();i++){
MeetinginfoBean mbean = (MeetinginfoBean)al.get(i);
String asplit[] = mbean.get(joinid);
String temp = "";
for(int j=0;j<asplit.size();j++){
String sql = "select * from userinfo where userid = asplit[j];
ResultSet rs=st.executeQuery(sql);
while (rs.next())
{
String joinid =rs.getString("username");
temp = temp+username+",";//最后要去掉一个,号
.............
)
rs.close();
mbean.setTemp(temp);
}
}现在mbean里的值就是楼主需要得了,你可以任意使用了。
这行代码应该写在下面的括号外面