`
hybxiaodao
  • 浏览: 246697 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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

 
阅读更多

问题背景如下:
有两张表 

table1

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

 

table2

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

 

table3

ID 姓名ID 爱好ID
1 1 1
2 1 2
3 2 1
4 2 3
5 3 2
6 3 3

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

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

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

 

 

 

 

 

 

分享到:
评论

相关推荐

    labview字符串创建数组

    要将单个字符串创建成字符串数组,我们需要了解LabVIEW的基本数据结构和编程方法。以下是一些关于如何在LabVIEW中创建字符串数组的关键知识点: 1. **字符串数组的概念**: 在LabVIEW中,字符串数组是一种数据结构...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    PB通过连接字符串连接MySQL

    标题中的“PB通过连接字符串连接MySQL”指的是使用PowerBuilder(PB)这个开发工具,通过特定的连接字符串来与MySQL数据库建立连接。PowerBuilder是Sybase公司(现为SAP的一部分)开发的一种可视化、面向对象的编程...

    TIA博途中字符串转换相关指令的使用方法(一).docx

    TIA 博途中字符串转换相关指令的使用方法是指在 Siemens SIMATIC TIA Portal 中使用的字符串转换相关指令,包括移动和转换字符串指令、字符串和数值相互进行转换指令等。 1. 移动和转换字符串指令 移动和转换字符...

    获取数据库连接字符串.docx

    在不知道连接字符串格式的情况下,可以创建一个 UDL 文件,以获取连接字符串。右键新建一个文本文件,改名为 *.udl,右键打开方式选择 OLE DB Core Services。然后,在提供程序里选择 XXXX OLE DB Provider for ...

    关于js中连接字符串效率的测试例子!

    为了测试这些方法的性能,可以编写一个简单的基准测试脚本,创建大量字符串并使用各种方法进行连接,然后比较执行时间。例如: ```javascript function testConcat(num) { var str1 = ''; for (var i = 0; i ; i+...

    C#中在一个字符串中删除另一个字符或字符串

    标题提到的“C#中在一个字符串中删除另一个字符或字符串”涉及到的关键知识点主要包括字符串操作、字符数组、字符串替换以及正则表达式。以下将详细讲解这些知识点。 首先,C#中的字符串(`string`)是不可变的,这...

    Java 字符串常用方法

    - `new String()`: 使用此构造函数创建一个新的字符串对象,可以传入字符数组或另一个字符串作为参数。 - `""`: 空字符串字面量,表示没有字符的字符串。 2. **获取字符串信息** - `length()`: 返回字符串的长度...

    字符串连接方面测试时间

    值得注意的是,由于Java字符串是不可变的,每次使用“+”运算符连接字符串时,都会创建一个新的字符串对象,这不仅消耗CPU资源,还会导致更多的内存分配,特别是在循环中重复执行时,这种开销会累积得相当可观。...

    MATLAB 将数值嵌入字符串示例

    首先,MATLAB提供了两种主要的方法将数值插入到字符串中:字符串连接(string concatenation)和字符串格式化(string formatting)。下面将分别详细介绍这两种方法。 1. **字符串连接**: 字符串连接是通过操作符`...

    C#字符串操作

    8. `Concat(string[], string, ...)`:将多个字符串连接成一个新字符串。 9. `Join(string[], separator)`:使用指定的分隔符将字符串数组连接成一个字符串。 三、字符串格式化 C#提供`string.Format()`方法和`$`...

    C语言字符串拆分成字符串数组.c

    纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。

    JAVA 字符串 操作

    `split()`方法:根据指定的分隔符将字符串分割成多个子字符串,返回一个字符串数组。 7. 遍历字符串: 可以使用增强for循环或迭代器遍历字符串中的每个字符。 8. 字符串转其他类型: - `parseInt()`, `...

    matlab中拼接字符串的三种方法

    Matlab 中的字符串拼接是一种常见的操作,用于将多个字符串连接起来形成一个新的字符串。在本文中,我们将介绍 Matlab 中三种拼接字符串的方法,并提供两个示例。 方法 1:使用字符串数组 在 Matlab 中,我们可以...

    字符串解压缩

    在IT领域,字符串解压缩是一种常见的数据处理技术,主要用于将经过压缩编码的字符串恢复到原始形式。这个过程是数据压缩的逆操作,通常涉及到一系列算法和技术。以下是对字符串解压缩的详细阐述: 字符串压缩通常...

    C语言二进制字符串与十六进制字符串相互转化

    在C语言中,二进制和十六进制是两...通过上述方法,我们可以创建一个功能完备的小工具,帮助开发者快速进行二进制和十六进制字符串的相互转换。这不仅可以提高工作效率,也有助于理解和掌握C语言及MFC框架的基础知识。

    C语言实现字符串截取

    根据给定的信息,本文将详细解释两个用于C语言中字符串截取的方法:`subStringByIndex` 和 `subStringByPointer`。这两个函数都属于自定义实现,它们提供了灵活且实用的功能来帮助开发者轻松地从一个字符串中提取所...

    C# 字符串转十六进制串,16进制反向转回原字符串

    要将字符串转换为十六进制串,我们需要对字符串中的每个字符进行编码,然后将编码结果转换成十六进制字符串。C#提供了`BitConverter`类和`ToString`方法来完成这个任务: ```csharp public static string StringTo...

    java JAVA数组与字符串,编写图形界面的程序,接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印新生成的字符串。

    java JAVA数组与字符串,编写图形界面的程序,接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印新生成的字符串。 String 类或StringBuffer类 deleteCharAt方法

    C#数据库连接字符串加密解密类

    .net下C#数据库连接字符串在配置文件中的加密解密类

Global site tag (gtag.js) - Google Analytics