sql - 使用函数从另一个表创建连接表
问题描述
我有一个函数GetChildren(@id uniqueidentifier)
,它返回一个节点表和一个从删除触发器中删除的父表我想制作一个大节点表,为每一行连接 GetChildren 的输出。删除的 ID,我该怎么做?请说出如何仅以纯 sql 方式使其没有变量和循环
我想要类似于 linq c# 中的 SelectMany 的东西
例子:
deleted
桌子
+-----+
| Id |
+-----+
| 111 |
+-----+
| 222 |
+-----+
Nodes
桌子
+-----+----------+
| Id | ParentId |
+-----+----------+
| 111 | ... |
+-----+----------+
| 222 | ... |
+-----+----------+
| 333 | ... |
+-----+----------+
| 444 | 111 |
+-----+----------+
| 555 | null |
+-----+----------+
| 666 | 222 |
+-----+----------+
GetChildren('111')
将产生:
+-----+
| Id |
+-----+
| 111 |
+-----+
| 444 |
+-----+
GetChildren('222')
将产生:
+-----+
| Id |
+-----+
| 222 |
+-----+
| 666 |
+-----+
我想得到上面2个串联的表:
+-----+
| Id |
+-----+
| 111 |
+-----+
| 444 |
+-----+
| 222 |
+-----+
| 666 |
+-----+
如果deleted
将包含 4 行,我想连接GetChildren
每行的所有 4 个输出
解决方案
您可以使用CROSS APPLY根据另一个表中的行从一个表值函数返回和合并多个结果集。在您的示例中,如下所示:
SELECT c.*
FROM deleted d
CROSS APPLY GetChildren(d.Id) c
推荐阅读
- sql - 具有大表的 Postgresql 中的连接性能缓慢
- python - 选择列表中的特定统计信息
- ios - 将结构迁移到 Firebase 时“上传缺少所需的 dSYM”
- bash - 检索网页的特定部分
- ruby-on-rails - 如何挽救或防止 Rails 数据库连接异常并允许控制器操作继续
- php - 已安装 cURL,未定义函数 curl_init()
- amazon-web-services - 在 AWS ec2 中部署到 codedeploy 时出错
- c# - 如何使用c#从给定的复杂键中获取复杂对象的值
- android - ConstraintLayout - 修复不同设备上不均匀的 dp
- ansible - 无法使用 ansible ping 服务器