SQL Server笔记 -- 第34章:cross apply

第34.1节:将表行与单元格中动态生成的行连接

CROSS APPLY使你能够将表中的行与某些表值函数返回的动态生成的行"连接"。

想象一下,你有一个公司表,其中包含一列存储产品数组(ProductList列),以及一个解析这些值并返回产品集的函数。你可以选择公司表中的所有行,将此函数应用于ProductList列,并将生成的结果与父公司行"连接":

sql 复制代码
SELECT *
FROM Companies c
CROSS APPLY dbo.GetProductList(c.ProductList) p

对于每一行,ProductList单元格的值将提供给函数,函数将返回这些产品作为一组行,可以与父行连接。

第34.2节:将表行与单元格中存储的JSON数组连接

CROSS APPLY使你能够将表中的行与单元格中存储的JSON对象集合"连接"。

想象一下,你有一个公司表,其中包含一列存储产品数组(ProductList列),格式为JSON数组。OPENJSON表值函数可以解析这些值并返回产品集。你可以选择公司表中的所有行,使用OPENJSON解析JSON产品,并将生成的结果与父公司行"连接":

sql 复制代码
SELECT *
FROM Companies c
CROSS APPLY OPENJSON(c.ProductList)
WITH (Id int, Title nvarchar(30), Price money)

对于每一行,ProductList单元格的值将提供给OPENJSON函数,该函数将使用WITH中定义的架构将JSON对象转换为行。

第34.3节:按数组值过滤行

如果你在行中将标签列表存储为逗号分隔的值,STRING_SPLIT函数使你能够将标签列表转换为值表。CROSS APPLY使你能够将STRING_SPLIT函数解析的值与父行"连接"。

想象一下,你有一个产品表,其中包含一列存储逗号分隔的标签数组(例如promo,sales,new)。STRING_SPLIT和CROSS APPLY使你能够将产品行与其标签连接,以便你可以按标签过滤产品:

sql 复制代码
SELECT *
FROM Products p
CROSS APPLY STRING_SPLIT(p.Tags, ',') tags
WHERE tags.value = 'promo'

对于每一行,Tags单元格的值将提供给STRING_SPLIT函数,该函数将返回标签值。然后你可以按这些值过滤行。

注意:STRING_SPLIT函数在SQL Server 2016之前不可用。

相关推荐
哥是强混12 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
ffqws_12 小时前
redis面试:如何保证双写一致
数据库·redis·缓存
前端H12 小时前
微前端 v3 架构升级:从加载隔离到状态协同
前端·架构·状态模式
水无痕simon12 小时前
6 数据库同义词
数据库
Piko61413 小时前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
杜子不疼.13 小时前
【Qt初识】信号槽(三):机制意义、断开连接与 Lambda 表达式
开发语言·数据库·qt
陆枫Larry13 小时前
小程序包体积优化:用 SVG 图片替换 iconfont,并保留 CSS 控色能力
前端
AOwhisky13 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
BomanGe114 小时前
NSK W1501FA高速精密滚珠丝杠技术手册
数据库·经验分享·规格说明书
kiki-bf14 小时前
可用的mysql本地安装教程
数据库·mysql