我有以下SQLtable
[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专家可以解决这个问题。
非常感谢。
发布于 2015-08-27 16:07:04
没有测试数据是很困难的,但是像这样的东西应该可以做到:
我假设有一棵树,左边有一个父元素,右边有一个子列表。此查询返回的条目应具有类型5的父项和至少一个类型5的子项。
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)
<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>
https://stackoverflow.com/questions/32243038
复制相似问题