关于MYSQL的SQL语句,存储的数组id,如何显示出name,有点难度 10
A表classidclassname1中国2美国3日本4英国5法国B表idnameclassid1亚洲国家1,32欧洲国家2,4,5如果通过一句SQL语句查询B表,然后显...
A表
classid classname
1 中国
2 美国
3 日本
4 英国
5 法国
B表
id name classid
1 亚洲国家 1,3
2 欧洲国家 2,4,5
如果通过一句SQL语句查询B表,然后显示如下
id name classname
1 亚洲国家 中国,日本
2 欧洲国家 美国,英国,法国
也就是说B表中的classid字段存储的是A表的classid数组,查询B表时如何直接得到A表对应数组的名称 展开
classid classname
1 中国
2 美国
3 日本
4 英国
5 法国
B表
id name classid
1 亚洲国家 1,3
2 欧洲国家 2,4,5
如果通过一句SQL语句查询B表,然后显示如下
id name classname
1 亚洲国家 中国,日本
2 欧洲国家 美国,英国,法国
也就是说B表中的classid字段存储的是A表的classid数组,查询B表时如何直接得到A表对应数组的名称 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
2个回答
展开全部
表就不该这么存,这是一对多的关系,应该在A表加外键。而且美国不在欧洲。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写个函数肯定能解决。
create function f_contract(sclass varchar2)
is
declare
sname varchar2(30 char);
s_return varchar2(100 char);
i int:=0 ;
begin
loop while instr(sclass,',',i)>0
select classname into sname from tableB where instr(sclass,classid)>0
s_return:=s_return||sname;
i :=i+1;
end loop;
return s_return;
end ;
select id ,name,f_contract(classid) classname from tableB
create function f_contract(sclass varchar2)
is
declare
sname varchar2(30 char);
s_return varchar2(100 char);
i int:=0 ;
begin
loop while instr(sclass,',',i)>0
select classname into sname from tableB where instr(sclass,classid)>0
s_return:=s_return||sname;
i :=i+1;
end loop;
return s_return;
end ;
select id ,name,f_contract(classid) classname from tableB
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询