sql - 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
解决方案
您可以使用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 的字符串操作功能很差。
推荐阅读
- python - 包含查找 Pandas
- apache-spark - 使用 scala 正确加入 apache spark 数据帧,避免空值
- java - 使用 JSON 格式 java 获取字符串的特定部分
- delphi - Delphi JSONValue 获取值
- reactjs - 使用反应路由器 v4 传递参数并在 url 中使用它们
- c++ - 读取文件时将数据保存到指针数组
- python - 两个编译的 python 程序没有通过管道正确连接
- python - 追加到 QuerySet 项
- python - sklearn.ensemble.AdaBoostClassifier 是否应该依赖重复的估计器(弱学习器)?
- caldav - 为数据库收集数据创建 Caldav 端点 URL 的最佳方法?