我有一個表,其中有一個父/子關係,其中每個兒童的ExternalCategoryCode
列數據需要連接到父母ExternalCategoryCode
。使用兒童的記錄數據更新家長記錄的字段(同一張表)
這裏是被破壞一些示例性數據,其中所述父記錄(ID = 96) ExternalCategoryCode
是NULL。關係是通過ParentId
領域:
Id |Name |ExternalCategoryCode|ParentId
---|------------------------------|--------------------|---------
96 | Health & Personal Development| NULL | NULL
---|------------------------------|--------------------|---------
97 | Health | H1*;H2* | 96
---|------------------------------|--------------------|---------
98 | Personal Development | P1;P2;P3* | 96
---|------------------------------|--------------------|---------
99 | Other Health | OH* | 96
---|------------------------------|--------------------|---------
的數據應該是這樣的:
Id |Name |ExternalCategoryCode |ParentId
---|------------------------------|----------------------|---------
96 | Health & Personal Development| H1*;H2*;P1;P2;P3*;OH*| NULL
---|------------------------------|----------------------|---------
97 | Health | H1*;H2* | 96
---|------------------------------|----------------------|---------
98 | Personal Development | P1;P2;P3* | 96
---|------------------------------|----------------------|---------
99 | Other Health | OH* | 96
---|------------------------------|----------------------|---------
編輯:
- 後裔水平可深層任何級別,但子女 後代需要更新到主家長的
ExternalCategoryCode
。就拿近兩年的記錄如下(編號= 100 和編號= 101)都鏈接到ParentId
97.因爲編號= 97ParentId
IS NOT NULL,我們應該繼續向上樹,直到我們 找到NULL(最上面的父母)的ParentId
的記錄。 - 另一個問題是關於最上面的父母的
ExternalCategoryCode
是否包含重複?下面的例子顯示了M2 *兩次。這很好,因爲我們的業務邏輯類庫會在發現任何內容時過濾出重複項。 如果一條記錄在其
ParentId
(即孩子)有一個鏈接但有一個NULLExternalCategoryCode
,這些代碼可以被忽略。Id |Name |ExternalCategoryCode |ParentId ---|------------------------------|----------------------|--------- 96 | Health & Personal Development| H1*;H2*;P1;P2;P3*;OH*| NULL | | | | | M1;M2*; M2*;M3* | ---|------------------------------|----------------------|--------- 97 | Health | H1*;H2* | 96 ---|------------------------------|----------------------|--------- 98 | Personal Development | P1;P2;P3* | 96 ---|------------------------------|----------------------|--------- 99 | Other Health | OH* | 96 ---|------------------------------|----------------------|--------- 100| Medicine | M1;M2* | 97 ---|------------------------------|----------------------|--------- 101| Other Medicine | M2*;M3* | 97 ---|------------------------------|----------------------|--------- 102| Other Medicine 2 | NULL | 97 ---|------------------------------|----------------------|---------
有表中的其他父/子損壞也是如此。如何:
腳本這下問題的表和concatentate與孩子
ExternalCategoryCode
數據 父記錄ExternalCategoryCode
?列出更新的父記錄。通常使用
UPDATED
時,這恰恰說明了這樣的事情,因此我想報這個:使用(影響1行(S))
張婷婷林:
- SQL Server
後裔級別有多深?例如,97是96的孩子。但那麼會有一個101是97的孩子嗎?另外,會有兩個孩子的情況有相同的代碼(例如H1),那麼,父代中的代碼是否需要減少這個重複? – DVT
@DVT我將用這些答案編輯問題。 – garfbradaz
編輯以添加。 – garfbradaz