怎么实现以上查询

如何实现以下查询表 AAidnameage1lily82lucy93lilei9表 BBidAidwaihao12meinv22luoli31yujie查询出得结果A

如何实现以下查询
表 A
Aid       name        age

1         lily         8
2         lucy         9
3         lilei        9
表 B

Bid        Aid        waihao

1           2         meinv
2           2         luoli
3           1         yujie

查询出得结果
Aid       name        age          waihao
1         lily         8            yujie
2         lucy         9            meinv,louli
3         lilei        9
注意:外号有多的要用“,”分开
[最优解释]


SELECT A.AID, A.NAME, A.AGE, WM_CONCAT(B.WAIHAO) WAIHAO
  FROM A, B
 WHERE A.AID = B.AID(+)
 GROUP BY A.AID, A.NAME, A.AGE;
--测试
[SYS@myoracle] SQL>WITH A AS(
  2  SELECT 1 aid,'lily' NAME ,8 age FROM dual UNION ALL
  3  SELECT 2 aid,'lucy' NAME ,9 age FROM dual UNION ALL
  4  SELECT 3 aid,'lilei' NAME ,9 age FROM dual
  5  ),B AS(
  6  SELECT 1 bid,2 aid,'meinv' waihao  FROM dual UNION ALL
  7  SELECT 2 bid,2 aid,'lucy' waihao  FROM dual UNION ALL
  8  SELECT 3 bid,1 aid,'lilei' waihao FROM dual
  9  )SELECT A.AID, A.NAME, A.AGE, WM_CONCAT(B.WAIHAO) WAIHAO
 10    FROM A, B
 11   WHERE A.AID = B.AID(+)
 12   GROUP BY A.AID, A.NAME, A.AGE
 13  ;

       AID NAME         AGE WAIHAO
---------- ----- ---------- ----------
         1 lily           8 lilei
         2 lucy           9 meinv,lucy
         3 lilei          9

[其他解释]
select a.Aid, a.name, a.age, wm_concat(b.waihao,',') waihao


from a,b where a.aid=b.bid
group by a.Aid, a.name, a.age
[其他解释]
没人看了么
[其他解释]


select a.Aid, a.name, a.age, wm_concat(b.waihao,',') waihao
from a,b where a.aid=b.aid
group by a.Aid, a.name, a.age

[其他解释]
select t.Aid, t.name, t.age, wmsys.wm_concat(t.waihao,',') waihao
(select a.Aid ,a.name , a.age ,b.waihao 
from a,b where a.aid=b.aid(+))t
group by t.Aid 
[其他解释]

--SQL:
WITH a AS
(
SELECT 1 a, 'lily' b,  8 c FROM dual
UNION ALL
SELECT 2, 'lucy', 9 FROM dual
UNION ALL
SELECT 3, 'lilei', 9 FROM dual
),
 T AS
(
SELECT 1 a, 2 b, 'meinv' c FROM dual
UNION ALL
SELECT 2, 2, 'luoli' FROM dual
UNION ALL
SELECT 3, 1, 'yujie' FROM dual
)
SELECT a.a,a.c,a.b,t.c
FROM 
(SELECT b,max(substr(sys_connect_by_path(c,','),2)) c
FROM
(
       SELECT a,b,c,row_number()over(PARTITION BY b ORDER BY a)  rn FROM t
)
START WITH rn=1 
CONNECT BY rn-1 = PRIOR rn AND b=PRIOR b
GROUP BY b) t,a
WHERE t.b(+)=a.a


--result:

18lilyyujie
29lucymeinv,luoli
39lilei



[其他解释]
大家理解错我的意思了  那个waihao字段是不固定的 不能用带入的来查询,如果我再新增那查询语句岂不是还得再改。。。我要的是那种不用改查询语句就能查到那种效果,不管对应的waihao 有多少个...
[其他解释]
參照
/****************************************************************************************  
Oracle分拆合并表  
  
整理人:中國風(Roy)  
日期:2011.11.02  
*****************************************************************************************/  
  
/**--合并  
  
--模拟数据  
Col1    Col2  
1   a  
1   b  
1   c  
2   d  
2   e  
3   f  
**/  
  
/**--生成结果  
  
COL1    COL2  
1   a,b,c  
2   d,e  
3   f   
**/  
  
  
/**oracle10g以上版本字符串函数wmsys.wm_concat**/  
  
/**方法1**/  
with Tab  
as  
(  
select 1 as Col1,'a'  as Col2 from dual union all  
select 1,'b' from dual  union all  
select 1,'c' from dual union all  


select 2,'d' from dual union all  
select 2,'e' from dual union all  
select 3,'f' from dual   
)  
select  
    Col1,wmsys.wm_concat(Col2 ) as Col2  
from tab  group by Col1  
  
  
/**oracle9i可以用connect by**/  
  
/**方法2**/  
with Tab  
as  
(  
select 1 as Col1,'a'  as Col2 from dual union all  
select 1,'b' from dual  union all  
select 1,'c' from dual union all  
select 2,'d' from dual union all  
select 2,'e' from dual union all  
select 3,'f' from dual   
)  
select   
    Col1,substr(max(sys_connect_by_path(Col2,',')),2) Col2  
from   
    (select a.*,row_number()over(partition by Col1 order by Col1) rn from Tab a )  
group by Col1 start with rn=1  
connect by rn-1=prior rn and Col1=prior Col1  
order by Col1;  
  
/**--分拆  
  
--模拟数据  
Col1    Col2  
1   a,b,c  
2   d,e  
3   f  
**/  


http://blog.csdn.net/roy_88/article/details/6930577
[其他解释]
说实话,没看懂。


引用:
大家理解错我的意思了 那个waihao字段是不固定的 不能用带入的来查询,如果我再新增那查询语句岂不是还得再改。。。我要的是那种不用改查询语句就能查到那种效果,不管对应的waihao 有多少个...

[其他解释]
引用:
大家理解错我的意思了 那个waihao字段是不固定的 不能用带入的来查询,如果我再新增那查询语句岂不是还得再改。。。我要的是那种不用改查询语句就能查到那种效果,不管对应的waihao 有多少个...


上面很多例子都能解决你的问题,。其中的wm_concat是10g以后版本出现的函数。可能3楼的例子楼主没有看懂才提出的这个疑问,在3楼使用的那些waihao不是SQL语句的内容,with ... as ()中的内容是用来生成测试数据的,你在实际使用中是不需要引用这部分代码的。
[其他解释]
哦,谢谢...
引用:
引用:
大家理解错我的意思了 那个waihao字段是不固定的 不能用带入的来查询,如果我再新增那查询语句岂不是还得再改。。。我要的是那种不用改查询语句就能查到那种效果,不管对应的waihao 有多少个...


上面很多例子都能解决你的问题,。其中的wm_concat是10g以后版本出现的函数。可能3楼的例子楼主没有看懂才提出的这个疑问,在3楼使用的……