从同一个表中分配值

时间:2012-03-29 02:35:37

标签: sql sql-server-2008

我有一个数据库表,其中包含不同行之间的父子关系 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
)

我希望看到一个不会使用游标的解决方案。

由于

1 个答案:

答案 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