现在又A,B两张表,如下:
table A
SU_IDS UPDATE
-----------------------
25,26 2009-5-6 14:26:24
24 2009-5-6 14:26:25
21,22,23 2009-5-6 14:26:26
table B
ID NAME
-----------------------
21 张三
22 李斯
23 王武
24 赵六
25 阿达
26 阿尔求高手帮我改一下下面的sql:
select A.SU_IDS,A.UPDATE,? AS SU_NAMES
from A,B
where ????
使得可以得到如下所示的表C.
table C
SU_IDS UPDATE SU_NAMES
-----------------------
25,26 2009-5-6 14:26:24 阿达,阿尔
24 2009-5-6 14:26:25 赵六
21,22,23 2009-5-6 14:26:26 张三,李斯,王武
table A
SU_IDS UPDATE
-----------------------
25,26 2009-5-6 14:26:24
24 2009-5-6 14:26:25
21,22,23 2009-5-6 14:26:26
table B
ID NAME
-----------------------
21 张三
22 李斯
23 王武
24 赵六
25 阿达
26 阿尔求高手帮我改一下下面的sql:
select A.SU_IDS,A.UPDATE,? AS SU_NAMES
from A,B
where ????
使得可以得到如下所示的表C.
table C
SU_IDS UPDATE SU_NAMES
-----------------------
25,26 2009-5-6 14:26:24 阿达,阿尔
24 2009-5-6 14:26:25 赵六
21,22,23 2009-5-6 14:26:26 张三,李斯,王武
解决方案 »
- dbms_job.submit问题
- 请教oracle监听问题
- 在win2000server下,安装了oracle9i服务器版,用sqlplus连接数据库时提示tns错误,包无法写入程序,怎么回事?
- 如何将PowerDesigner生成的oracle库表关联起来?急。。。
- 调用存储过程权限不足(存储过程中使用了dbms_sql),迷惑很久的问题
- 那里有oracle8客户端和服务器端的安装资料?
- 存储过程返回记录集,我怎么在java里面获得记录的遍历呢?求助,100分谢谢
- 在那里能下载Oracle的FOR 2000的版本??(急急急!!)
- oracle9i中查系统表数据为空是什么回事!
- pl/sql developer导入表时报“Error reading file”
- Oracle递归查询,编译出错
- left join 如何去除重复
from a,b
where b.id in (a.su_ids) ;
A.SU_IDS NVARCHAR2(500) Y
B.ID NUMBER N
不好意思,我刚才没说清楚,SU_IDS是用 非数字的任意特殊符号()分开的。
(SU_IDS VARCHAR2(100),
UPDATE_time DATE
);
INSERT INTO TABLE_A VALUES('25,26' ,TO_DATE('2009-5-6 14:26:24','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO TABLE_A VALUES('24' ,TO_DATE('2009-5-6 14:26:25','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO TABLE_A VALUES('21,22,23',TO_DATE('2009-5-6 14:26:26','YYYY-MM-DD HH24:MI:SS'));
commit;CREATE TABLE TABLE_B
(ID VARCHAR2(10),
NAME VARCHAR2(100)
);INSERT INTO TABLE_B VALUES('21','张三');
INSERT INTO TABLE_B VALUES('22','李斯');
INSERT INTO TABLE_B VALUES('23','王武');
INSERT INTO TABLE_B VALUES('24','赵六');
INSERT INTO TABLE_B VALUES('25','阿达');
INSERT INTO TABLE_B VALUES('26','阿尔');
COMMIT;SELECT DISTINCT RR.SU_IDS,
RR.UPDATE_TIME,
WMSYS.WM_CONCAT(NAME) OVER(PARTITION BY RR.SU_IDS, RR.UPDATE_TIME) AS NAMES
FROM (SELECT R.SU_IDS,
R.UPDATE_TIME,
R.NAME
FROM (SELECT A.SU_IDS,
A.UPDATE_TIME,
INSTR(A.SU_IDS,
B.ID) AS IN_FLAG,
B.NAME
FROM TABLE_A A,
TABLE_B B ---
) R
WHERE R.IN_FLAG > 0
ORDER BY R.IN_FLAG ---
) RR
24 2009-5-6 14:26:25 赵六
25,26 2009-5-6 14:26:24 阿尔,阿达
21,22,23 2009-5-6 14:26:26 张三,李斯,王武
SELECT DISTINCT RR.SU_IDS,
RR.UPDATE_TIME,
WMSYS.WM_CONCAT(NAME) OVER(PARTITION BY RR.SU_IDS, RR.UPDATE_TIME) AS NAMES
FROM (SELECT R.SU_IDS,
R.UPDATE_TIME,
R.NAME
FROM (SELECT A.SU_IDS,
A.UPDATE_TIME,
INSTR(A.SU_IDS,
B.ID) AS IN_FLAG,
B.NAME
FROM TABLE_A A,
TABLE_B B ---
) R
WHERE R.IN_FLAG > 0
ORDER BY R.SU_IDS,R.IN_FLAG ---
) RR
ORDER BY RR.SU_IDS
---------------------------------------
结果
SU_IDS UPDATE_TIME NAMES
21,22,23 2009-5-6 14:26:26 张三,李斯,王武
24 2009-5-6 14:26:25 赵六
25,26 2009-5-6 14:26:24 阿达,阿尔
厉害有没有试过如果有id为2的user,会不会有bug呀。
2、xe版的oracle,没有WMSYS用户
INSERT INTO TABLE_B VALUES('2','刘二')
--->TABLE_A中的SU_IDS是用 非数字的任意特殊符号()分开的,且这个特殊符号是固定的,不能是这样,12,23.24;25 必须是 12,23,24,25
具体的sql见楼下
CREATE TABLE TABLE_A
(SU_IDS VARCHAR2(100),
UPDATE_time DATE
);
INSERT INTO TABLE_A VALUES('25,26' ,TO_DATE('2009-5-6 14:26:24','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO TABLE_A VALUES('24' ,TO_DATE('2009-5-6 14:26:25','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO TABLE_A VALUES('21,22,23',TO_DATE('2009-5-6 14:26:26','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO TABLE_A VALUES('2,22,23',TO_DATE('2009-5-6 14:26:26','YYYY-MM-DD HH24:MI:SS'));-----> 注意
commit;CREATE TABLE TABLE_B
(ID VARCHAR2(10),
NAME VARCHAR2(100)
);INSERT INTO TABLE_B VALUES('21','张三');
INSERT INTO TABLE_B VALUES('22','李斯');
INSERT INTO TABLE_B VALUES('23','王武');
INSERT INTO TABLE_B VALUES('24','赵六');
INSERT INTO TABLE_B VALUES('25','阿达');
INSERT INTO TABLE_B VALUES('26','阿尔');
INSERT INTO TABLE_B VALUES('2','刘二');-----> 注意
COMMIT;
------------------ SQL
SELECT DISTINCT RR.SU_IDS,
RR.UPDATE_TIME,
WMSYS.WM_CONCAT(NAME) OVER(PARTITION BY RR.SU_IDS, RR.UPDATE_TIME) AS NAMES
FROM (SELECT R.SU_IDS,
R.UPDATE_TIME,
R.NAME
FROM (SELECT A.SU_IDS,
A.UPDATE_TIME,
INSTR(','||A.SU_IDS||',', ---------------- 前后并上',',来解决问题
','||B.ID||',') AS IN_FLAG,
B.NAME
FROM TABLE_A A,
TABLE_B B ---
) R
WHERE R.IN_FLAG > 0
ORDER BY R.SU_IDS,R.IN_FLAG ---
) RR
ORDER BY RR.SU_IDS
----------------结果
SU_IDS UPDATE_TIME NAMES
---------- ----------- ------------------
2,22,23 2009-5-6 14 刘二,李斯,王武
21,22,23 2009-5-6 14 张三,李斯,王武
24 2009-5-6 14 赵六
25,26 2009-5-6 14 阿达,阿尔
suncrafted ,你看到了吗,有重复的数据哦,你放大图片看一下就看到了,再帮我改改哦??