обновить дочерний атрибут parentcategoryId, если у самого parentcategoryId нет родителя и каких-либо продуктов? - PullRequest
0 голосов
/ 31 января 2012

Прежде всего мне нужно, чтобы эти ID категории

1-whos parentcategoryID only appears one 
2-ParentCategoryID is not zero
3-IsProduct =0

sql scrren shot

только на картинке 4 categoryId удовлетворяли всем этим трем условиям.

Теперья должен обновить те категории, у которых родитель 4 с ParentCategoryID в моем случае 2.

я могу сделать это для одной строки, но если есть несколько categoryId, которые удовлетворяют этим трем условиям, тогда я должен сделатьцикл для этого или я могу сделать это с ;with cte, но я не понимаю, как написать код для этого?

1 Ответ

1 голос
/ 31 января 2012

Если я не понял, что вы спрашиваете, я думаю, что приведенное ниже выполнит необходимое обновление.В приведенных вами данных это обновит строки 4 и 6. Я попытался прокомментировать предложение where в подзапросе, чтобы оно соответствовало указанным вами критериям.

UPDATE  yourTable
SET     ParentCategoryID = upd.CategoryID
FROM    yourTable tab
        INNER JOIN
        (   SELECT  CategoryID, tab.ParentCategoryID
            FROM    yourTable tab
                    LEFT JOIN 
                    (   SELECT  ParentCategoryID
                        FROM    yourTable
                        GROUP BY ParentCategoryID
                        HAVING  COUNT(*) > 1        
                    ) dupe
                        ON dupe.ParentCategoryID = tab.ParentCategoryID
            WHERE   dupe.ParentCategoryID IS NULL   -- 1. PARENT ID DOES NOT EXIST MORE THAN ONCE
            AND     tab.ParentCategoryID != 0       -- 2. PARENT ID IS NOT 0
            AND     IsProduct = 0                   -- 3. ISPRODUCT = 0
            GROUP BY CategoryID, tab.ParentCategoryID
        ) upd
            ON upd.CategoryID = tab.ParentCategoryID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...