首页 > 解决方案 > SQL 循环遍历字符串,查找 ID,并从中创建视图

问题描述

表 A [Product] 列:ProductID、Name 和 Price。</p>

表 B [收藏夹] 列:ListID、ListName、ListContents

B.ListContents 包含一个 ID 列表,用“,”分隔 Exp: 1,2,5,6,8

现在我想创建一个循环遍历每个 B.ListContents 值的视图,提取数字,并从表 A 中找到其对应的“ProductID”“名称”“价格”。</p>

结果应该是这样的:

在此处输入图像描述

我知道如何在 c# 中使用 .Split(',') 来处理它,但不知道如何在 SQL 上处理它。</p>

顺便说一句,你如何用更好的英语来命名这个问题?(我是 ESL),谢谢。


编辑:我使用的是 Azure SQL。SSMS v18.5.1

标签: sqlsql-server

解决方案


您可以使用string_split()

select f.listid, p.*
from favorites f cross apply
     string_split(f.listcontents) s  join
     products p
     on p.productid = s.value;

然后你应该修复数据模型!数据模型坏了,坏了,坏了:

  • 数字不应存储在字符串中。
  • 列应该只有一个值(JSON 和 XML 列除外)。
  • 应正确声明外键关系。
  • SQL 的字符串操作功能很差。

推荐阅读