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 小时前
MiniMax M2.5 的 SQL 能力令人惊艳!
sql·llm
葡萄城技术团队1 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰1 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans1 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端
徐小夕1 小时前
JitWord 2.3: 墨定,行远
前端·vue.js·github
南果梨1 小时前
OpenClaw 完整教程!从安装到使用(官方脚本版)
前端·git·开源
大雨还洅下1 小时前
前端手写: new操作符
前端
hqk2 小时前
鸿蒙项目实战:手把手带你实现 WanAndroid 布局与交互
android·前端·harmonyos
是糖糖啊2 小时前
OpenClaw 从零到一实战指南(飞书接入)
前端·人工智能·后端
Despupilles2 小时前
第三篇、基本骨架结构
前端