2012-03-29 40 views
1

我有一个数据库表,其中有不同行之间的父子关系。
1家长可以有任意数量的孩子。
孩子没有孩子。
我想将'Message'从'Parent Category'复制到子类别。从同一个表中分配值

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 

如果这是样本数据,平装在查询运行后应该有Specials,因为它是Message。
我已经得到子行(查询运行速度非常慢,不知道为什么),但我如何获取数据并将其分配给适当的子行?

[email protected] = 1 
select * from Categories 
where ParentID in(
select CategoryID from Categories 
where DeptID = @DeptId 
) 

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

感谢

回答

3

一个JOIN在两个表的副本作为孩子家长&应该做的工作(和我相当肯定这是SQL服务器有效)。它在子表上查找非空ParentID,并从关联的ParentID行复制Message

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 
+0

的方法是正确的,但是对于SQL Server,你应该改变你的第几行:更新c从C类INNER JOIN ..... – jlnorsworthy 2012-03-29 03:10:39

+0

@jlnorsworthy从我的[语法阅读](HTTP ://msdn.microsoft.com/en-us/library/ms177523.aspx),这应该是有效的:'更新别名SET col = val从tbl,tbl,tbl ...' – 2012-03-29 03:12:33

+0

是啊你是对的 - 修复一个语法错误只能引入另一个。我要指责无法格式化评论:) – jlnorsworthy 2012-03-29 03:14:35

相关问题