数据库多表查询,一对多,一对一

siny 发布于 2015/06/11 09:51
阅读 1K+
收藏 0

a b c 三张表 a对b,是一对多,b对c 是一对一 b表中的pid 对应a表中的oid,c表中bm对应b表中的orgtype

a表字段 oid,uname,addr, b表字段 oid,pid,orgtype c表字段 oid,bm,val

现在要查询寻字段:uname,addr,val,怎么写sql 注:

a表{‘1’,‘aaa’,‘www’}

b表{‘1’,‘1’,‘10’}{‘2’,‘1’,‘12’}

c表{‘1’,‘10’,‘使用’},{‘2’,‘12’,‘安装’},{‘3’,‘15’,‘制造’}

期望的结果是:{aaa,www,使用/安装}而不是{aaa,www,使用},{aaa,www,安装}

加载中
0
如比如比
如比如比

select

a.uname,a.addr,group_concat(c.val separator '/') as val from a,b,c

where

a.oid=b.pid and

b.oid=c.oid

group by a.oid;

如比如比
如比如比
回复 @siny : 不客气,微软有点岁数大了哈。
siny
siny
@茶壶 最后还是写了个函数来解决的。。谢谢了!
如比如比
如比如比
回复 @siny : 这么写行不行?没执行过的。 select a.uname,a.addr, ,( select c.val + '/' from c where b.oid=c.oid for xml path('') ) as val_concat from a,b where a.oid=b.pid and group by a.oid;
如比如比
如比如比
回复 @siny : 那是mysql的,sql server2000的话要自己写函数了。
siny
siny
group_concat好像sql server 2000没有这个函数把。。
0
siny
siny
group_concat好像sql server 2000没有这个函数把。。
0
如比如比
如比如比

引用来自“siny”的评论

group_concat好像sql server 2000没有这个函数把。。

参照:

CREATE FUNCTION dbo.List 

    @id int

RETURNS VARCHAR(8000) 
AS 
BEGIN 
    DECLARE @r VARCHAR(8000) 
      SELECT @r = ISNULL(@r+', ', '') + name
      FROM dbo.yourtable 
      WHERE id = @id 
        and Name > ''  -- add filter if you think you will have empty strings
    RETURN @r 
END 




select distinct id, dbo.list(id) Names
from yourtable;

0
quwen
quwen
环卫工人作文http://www.zuowen.org.cn/chusanylw/201301/13587536541473.html
返回顶部
顶部