我有一个数据库表,其中包含不同行之间的父子关系 1父母可以有任意数量的孩子 孩子没有孩子 我想将“消息”从“父类别”复制到子类别。
CategoryID Name Value Message ParentID DeptId
1 Books 9 Specials 1
2 Music 7 1
3 Paperback 25 1 1
4 PDFs 26 1 2
5 CDs 35 2 1
如果那是样本数据,在运行查询后,平装应该有特价作为消息 我得到了子行(查询运行速度很慢,不知道为什么),但是如何获取数据并将其分配给适当的子行?
--@DeptId = 1
select * from Categories
where ParentID in(
select CategoryID from Categories
where DeptID = @DeptId
)
我希望看到一个不会使用游标的解决方案。
由于
答案 0 :(得分:3)
作为儿童和桌子的两张桌子副本JOIN
parent应该完成这项工作(我很确定这在SQL Server中是有效的)。它在子表上查找非NULL ParentID
,并从关联的Message
行复制ParentID
。
UPDATE c
SET c.Message = p.Message
FROM
Categories c
INNER JOIN Categories p ON c.ParentID = p.CategoryID
WHERE
c.ParentID IS NOT NULL
AND c.DeptID = @DeptID