【发布时间】:2014-02-09 09:37:12
【问题描述】:
SQL 开发人员,我有一个计划不周的数据库作为学习 SQL Server 2012 的任务。
所以,有表Elem:
+-----------+----+---+----------+------------+
|VERSION(PK)|NAME|KEY|PARENT_KEY|DIST_KEY(FK)|
+-----------+----+---+----------+------------+
|1 |a |12 |NULL |1 |
+-----------+----+---+----------+------------+
|2 |b |13 |12 |1 |
+-----------+----+---+----------+------------+
|3 |c |14 |13 |1 |
+-----------+----+---+----------+------------+
|4 |d |15 |12 |1 |
+-----------+----+---+----------+------------+
|5 |e |16 |NULL |1 |
+-----------+----+---+----------+------------+
|6 |e |17 |NULL |2 |
+-----------+----+---+----------+------------+
更新行后,我需要检查元素的父键,以不允许元素成为自祖母之类的东西..
当我删除该行时,我需要删除所有子项和子项的子项等。
问题是:
如何选择 DIST 的一个元素的所有“父母 + 祖父母 + 等”?
如何选择 DIST 的一个元素的所有“儿子 + 孙子 + 等”?
我阅读了有关 CTE 的解决方案,但我没有元素的根源,我什至无法理解如何使用 CTE。
请帮忙!
谢谢。
【问题讨论】:
-
你确实有一个根:没有
parent_key的项目 -
我的意思是所有元素的根,但如果根可以是行 - 你是对的。已编辑。但我对 SQL 很陌生。我可以编写触发器,但根本无法制作简单的递归和其他循环/CTE 解决方案。所以拥有那个根仍然不能帮助我。
标签: sql sql-server tsql select sql-server-2012