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

相关推荐
John_ToDebug8 小时前
判断力无法被 AI 替代,但它正在被你亲手扔掉
经验分享·笔记
benbenAItalk8 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_962218618 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
我爱吃土豆19 小时前
AI 编程工具远程开发指南:Codex 桌面版与 WorkBuddy 通过 SSH 连接云服务器实践
服务器·人工智能·ssh
2601_962885729 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎12349 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
一技安身9 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
李高钢9 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
柳鲲鹏9 小时前
运气学概论:提纲草案
笔记
yuzhiboyouye11 小时前
那xml对应的sql语法,列举一下
xml·数据库·sql