我在Sql Server 2012中有一个表(cid,name,parent_cid),名为 categories 。
现在,当我搜索某个特定类别的内容时,我需要搜索其所有孩子(包括所有大孩子)及其所有父母(包括祖父母)类别。
目前我正在使用存储过程来获取所提供类别的所有孩子和父母,而不是基于他们过滤并返回结果。
当然,这不是一个好的解决方案,也不是浪费资源
为此有一个视图会更好。在哪里我可以得到所有类别的父母和孩子(包括他们自己)。
我可以说视图看起来像是什么:
cid(代表我有兴趣得到所有孩子和父母的cid)
related_cids(拥有此cid的所有子节点和父节点)
比我能做的从my_view中选择相关的cid = SOMEID;
我将拥有所有的父母和chidls提供的SOMEID
我正在寻找的这种观点可能也不是一个好的解决方案。所以这个观点或任何其他解决这个问题的方法都会很棒
谢谢你提前
修改
Clarification->我还没有视图,我正在寻找如何创建一个将执行上述任务的视图。希望现在更清楚。
EDIT2:我已经包含了当前用于获取特定类别的所有父母和孩子的存储过程。我按照之前的解释尝试将其转换为视图,但未成功。因为我正在寻找一个视图,我可以在表格中让所有类别的所有孩子和父母反对他们。
但是当前程序返回所有父母和子女类别及其各自的直接父母和他们的名字。 / p>
create procedure mysp_getAllChildAndParentCategories @id INT as
WITH Parent AS (
SELECT cid, name, parent_cid
FROM category
WHERE cid = @Id
UNION ALL
SELECT a.cid, a.name, a.parent_cid
FROM category a
INNER JOIN Parent B ON B.cid = A.parent_cid
),
--Get Childs of @Id
Child AS (
SELECT cid, name, parent_cid
FROM category
WHERE cid = @Id
UNION ALL
SELECT a.cid, a.name, a.parent_cid
FROM category A
INNER JOIN Child B ON B.parent_cid = A.cid
)
SELECT * FROM Parent
UNION
SELECT * FROM Child;