首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL2008 R2递归查询

SQL2008 R2递归查询
EN

Stack Overflow用户
提问于 2015-08-27 15:20:34
回答 1查看 46关注 0票数 0

我有以下SQLtable

代码语言:javascript
复制
[rel_id] [int] NOT NULL,
[rel_type_id] [int] NOT NULL,
[left_object_id] [int] NOT NULL,
[left_object_type] [int] NOT NULL,
[right_object_id] [int] NOT NULL,
[right_object_type] [int] NOT NULL,
[template] [char](1) NOT NULL

基本上,这个表控制不同对象之间的关系。我需要构造一些SQL,这样给定的left_object_id就可以递归地计算出所有与它有关系的对象。

我只对左侧和右侧对象类型都为5的对象感兴趣

简而言之,SQL需要执行以下操作: 1.输入左对象id 2.搜索表,返回关联的左对象与输入匹配的所有右对象id 3.对于找到的每个右对象id,返回步骤1中的上一步4.重复执行,直到找不到其他值

听起来很复杂,但我相信有一些SQL专家可以解决这个问题。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-08-27 16:07:04

没有测试数据是很困难的,但是像这样的东西应该可以做到:

我假设有一棵树,左边有一个父元素,右边有一个子列表。此查询返回的条目应具有类型5的父项和至少一个类型5的子项。

代码语言:javascript
复制
SELECT *
FROM @tbl AS tbl
WHERE (SELECT leftObj.rel_type_id FROM @tbl AS leftObj WHERE leftObj.right_object_id=tbl.rel_id)=5
  AND EXISTS(SELECT rightObjList.rel_type_id 
             FROM @tbl AS rightObjList 
             WHERE rightObjList.left_object_id=tbl.rel_id
               AND rightObjList.rel_type_id=5)

代码语言:javascript
复制
<table><tbody><tr><th>rel_id</th><th>rel_type_id</th><th>left_object_id</th><th>left_object_type</th><th>right_object_id</th><th>right_object_type</th></tr><tr><td>52</td><td>44</td><td>4</td><td>5</td><td>1</td><td>5</td></tr><tr><td>53</td><td>44</td><td>4</td><td>5</td><td>3</td><td>5</td></tr><tr><td>54</td><td>44</td><td>5</td><td>5</td><td>4</td><td>5</td></tr><tr><td>55</td><td>44</td><td>5</td><td>5</td><td>6</td><td>5</td></tr></tbody></table>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32243038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档