创建视图碰到一对多关系,想把字符串连接起来的方法

问题背景如下:
有两张表 

table1

ID姓名
1张三
2李四
3王五

 

table2

ID爱好
1篮球
2足球
3排球

 

table3

ID姓名ID爱好ID
111
212
321
423
532
633

现在我想创建一个视图创建成如下格式:

ID姓名爱好
1张三篮球、足球
2李四篮球、排球
3王五足球、排球

视图中的“爱好” 是从table2 里爱好的部分和

这里用户和爱好是一对多的关系

 

在创建视图的时候,需要把一对多的语句写成“XXX,XXX”的格式

 

视图创建方法

CREATE VIEW [dbo].[view_test] 
AS
  SELECT table1.*,
         GetHobby(table1.id)  --GetHobby是数据库自定义的函数

  from table1

 GetHobby函数的定义:

CREATE FUNCTION [dbo].[GetHobby]
(
    @userid int         --定义输入用户的ID
)
RETURNS varchar(500)  --定义输出类型
AS
BEGIN       --创建方法开始
    declare @habby varchar(500)  --定义变量保存爱好
    set @habby =''    -- 赋值
    declare habby_cursor CURSOR FORWARD_ONLY FOR   --建立游标,根据table3的一对多关系选取出某用户的爱好
            SELECT table2.爱好
            from table2,table3
            where table3.姓名ID=@userid and
                       table3.爱好ID=table2.爱好
    open habby_cursor        --打开游标
    declare @temp varchar(50)    --定义临时变量
    FETCH NEXT FROM habby_cursor INTO @temp      --进入游标
    while @@fetch_status <> -1            --while循环一条一条读游标
    begin
         select @habby =@habby +@temp+', '      --将从游标读到的信息拼装
         FETCH NEXT FROM habby_cursor INTO @temp    --进入下一条
    end
    CLOSE habby_cursor     --关闭游标
    DEALLOCATE habby_cursor     --释放游标

    select @habby =substring(@habby ,0,len(@habby ))    --去除最后一个逗号
    -- Return the result of the function
   RETURN @habby 

END

 

视图创建好了之后

select * from view_test

就可以取出我想取的数据了

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值