解决方案 »
- 在线急等String sql = "SELECT * FROM test3 WHERE NAME LIKE '%"+?+"%'";
- 学习hibernate框架ing..throw StackOverflowError
- 向数据库插入一样数据。 但是数据库里却出现 数据相同的二行。
- jsp怎么得到二进制,求代码
- struts2如何在action中向succeed.jsp传递参数
- struts 中文问题,急求解!!!
- tomcat 5.0.28 用JNDI注册sqlserver驱动,server.xml中<Context>的写法
- 客户端调用Java Web Service的某方法的String参数最大长度为多少啊?
- 关于文件锁定的问题
- ××××用过nokia wap toolkit的熟手请进来!
- 求一个排列组合程序,小弟新手。。。谢谢众大神
- hibernate search 什么query是sql里的in操作
存储过程不会;
两个sql,select user_class from xxx where user_name=张三
select class from xxx where id in (xxx)
user表 数据
user_name user_class(外键)
张三 1
张三 2
张三 3
张三 4class表数据
class_id class_name
1 1班
2 2班
3 3班
4 4班
以下是基于oracle的sqlselect user_name, wmsys.wm_concat(class_name)
from (SELECT REGEXP_SUBSTR(t.user_class, '[^,]+', 1, num) AS user_id,
t.user_name
FROM user t, (SELECT LEVEL num FROM DUAL CONNECT BY LEVEL <= 100)
WHERE num <=
LENGTH(t.user_class) - LENGTH(REPLACE(t.user_class, ',')) + 1
and t.user_name = '张三') lt
left join class lt1
on lt.user_id = lt1.class_id
REGEXP_SUBSTR(user_class, '[^,]+', 1, LEVEL, 'i') AS user_class
FROM user1
CONNECT BY LEVEL <= LENGTH(user_class) -
LENGTH(REGEXP_REPLACE(user_class, ',', '')) + 1
二:两表关联 select a.user_name, c.class_name
from (SELECT user_name,
REGEXP_SUBSTR(user_class, '[^,]+', 1, LEVEL, 'i') AS user_class
FROM user1
CONNECT BY LEVEL <= LENGTH(user_class) -
LENGTH(REGEXP_REPLACE(user_class, ',', '')) + 1) a
left join class_name c
on a.user_class = c.class_id
三:wm_concat可以把这个字段里面的值用逗号隔开合并
最终为 select a.user_name as user_name, wm_concat(c.class_name) as class
from (SELECT user_name,
REGEXP_SUBSTR(user_class, '[^,]+', 1, LEVEL, 'i') AS user_class
FROM user1
CONNECT BY LEVEL <= LENGTH(user_class) -
LENGTH(REGEXP_REPLACE(user_class, ',', '')) + 1) a
left join class_name c
on a.user_class = c.class_id
group by a.user_name
user_name user_class
张三 1,2,3,4你的user表怎么这样的啊??
CREATE TABLE ST
(
NAME VARCHAR(100),
CLASSID VARCHAR(100)
)
INSERT INTO ST VALUES ('张三','1,2,3,4')CREATE TABLE CL
(
CLASSID VARCHAR(100),
CLASSNAME VARCHAR(100)
)
insert into CL values ('1','1班');
insert into CL values ('2','2班');
insert into CL values ('3','3班');
insert into CL values ('4','4班');
Create function funTestReturn(@name varchar(10))
returns varchar(max)
as
begin
declare @str varchar(max)= ''
declare @strreturn varchar(max)= ''
declare @tmp varchar(10) =''
select @str= classid from ST where name=@name
set @str=@str+',';
while(@str<>'')
begin
set @tmp=left(@str,charindex(',',@str,1)-1);
select @strreturn+=className + ',' from cl where classid=@tmp;
set @str=stuff(@str,1,charindex(',',@str,1),'');
end
if(LEN(@strreturn)>0)
set @strreturn = SUBSTRING(@strreturn,1,LEN(@strreturn)-1);
return @strreturn
end
select ST.*, dbo.funTestReturn(ST.Name) as name from ST ;NAME CLASSID name张三 1,2,3,4 1班,2班,3班,4班 (1 行受影响)
From
(
Select '1' As Class_Id, '1班' As Class_Name Union All
Select '2' As Class_Id, '2班' As Class_Name Union All
Select '3' As Class_Id, '3班' As Class_Name Union All
Select '4' As Class_Id, '4班' As Class_Name
) T
Select [User_Name],Class=STUFF((SELECT ','+[Class_Name] FROM (Select [User_Name],Class_Name
From #User Join #Class On CharIndex(Class_Id,User_Class)>0 ) A WHERE [User_Name]=T.[User_Name] FOR XML PATH('')), 1, 1, '') From
(
Select [User_Name],Class_Name
From #User Join #Class On CharIndex(Class_Id,User_Class)>0
) T
Group by [User_Name]Drop Table #User
Drop Table #Class
是我在做数据迁移的时候用的,你可以学习学习。