`
hybxiaodao
  • 浏览: 247180 次
  • 性别: 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中,字符串数组是一种数据结构...

    字符串连接

    不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。 输入: 每一行包括两个字符串,长度不超过100。 输出: 可能有多组测试数据,对于每组数据, 不借用任何字符串库函数实现无冗余...

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

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

    PB通过连接字符串连接MySQL

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

    虚拟仪器第五次作业 字符串数组的连接,截取,插入,显示

    1. **字符串连接**:在LabVIEW中,可以使用“连接字符串”函数来将两个或多个字符串组合成一个新的字符串。这个函数接受一个或多个字符串数组作为输入,并返回一个包含所有输入字符串的单一字符串。你可以通过拖拽此...

    java 创建字符串类

    以上就是关于"Java创建字符串类"这一主题的详细阐述,包括`String`类的基本使用、可变字符串类`StringBuilder`和`StringBuffer`,以及相关的操作方法。理解并熟练运用这些知识点对于编写高效且功能丰富的Java程序至...

    算法与数据结构(C语言描述) 顺序表两个字符串连接起来

    算法与数据结构(C语言描述) 顺序表两个字符串连接起来,自己手打的,总的来说我感觉算法与数据结构

    字符串连接方面测试时间

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

    c#字符串操作方法实例

    C# 中的字符串操作方法是指在 C# 编程语言中对字符串进行操作的各种方法和技术。字符串是使用 string 关键字声明的一个字符数组,字符串对象是“不可变的”,即它们一旦创建就无法更改。 1. 字符串的不可变性 字符...

    创建一个字符串类

    创建一个字符串类,它应具有以下功能: 1. 生成一个空串; 2. 生成一个带初值的非空串; 3. 复制一个已有串; 4. 连接两个串(两个串对象连接、常量和串对象连接、串对象和常量连接); 5. 转换成char类型的串,...

    连接 字符 串.rar

    连接字符串,也称为字符串拼接,是指将两个或更多个字符串合并成一个单一的字符串。这个过程在各种编程语言中都有不同的实现方法,但核心思想是相同的。下面我们将深入探讨连接字符串的相关知识点。 1. **字符串...

    C#字符串操作

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

    C#串口通信 连接串口并发送字符

    使用Write()方法可以向串口发送字符串或字节数组。例如发送字符串: ```csharp mySerialPort.WriteLine("Hello, world!"); // 发送字符串 ``` 6. 关闭串口: 当通信完成后,记得关闭串口以释放资源: ```csharp ...

    JAVA 字符串 操作

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

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

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

    VB调用VC写的DLL 实现两个字符串相加成一个字符串

    - 实现这个函数,将两个字符串连接起来: ```cpp std::string ConcatenateStrings(const char* str1, const char* str2) { return std::string(str1) + std::string(str2); } ``` 2. **在VB中调用DLL**: - ...

    字符串解压缩

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

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

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

    在Vuejs中使用带标记的模板字符串

    - Vue.js虽然不直接支持模板字符串,但通过计算属性、方法和插槽机制,我们可以灵活地利用模板字符串来创建动态的视图内容。 - 保持良好的编码习惯和安全意识,避免引入潜在的安全漏洞。 理解并熟练运用这些概念...

    C语言实现字符串循环右移

    本文详细介绍了如何在C语言中实现字符串的循环右移,包括了两种不同的实现方法:一种使用字符串复制函数 `strcpy`,另一种使用内存拷贝函数 `memcpy`。每种方法都有其适用场景,开发者可以根据实际需求选择最适合的...

Global site tag (gtag.js) - Google Analytics