2012-03-29 44 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

相關問題