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之前不可用。

相关推荐
落花流水 丶1 小时前
MongoDB 完全指南
数据库·mongodb
文档搬运工1 小时前
OS的load average很高
数据库
爬山算法1 小时前
MongoDB(3)什么是文档(Document)?
数据库·mongodb
爬山算法1 小时前
MongoDB(9)什么是MongoDB的副本集(Replica Set)?
数据库·mongodb
thginWalker2 小时前
实战篇 & 结束篇
数据库
前端程序猿i2 小时前
第 8 篇:Markdown 渲染引擎 —— 从流式解析到安全输出
开发语言·前端·javascript·vue.js·安全
coding随想2 小时前
告别构建焦虑!用 Shoelace 打造零配置的现代 Web 应用
前端
css趣多多2 小时前
resize.js
前端·javascript·vue.js
网云工程师手记2 小时前
企业防火墙端口映射完整配置与安全收敛实操手册
运维·服务器·网络·安全·网络安全