Обновить таблицу, имеющую два разных столбца с одинаковым значением в разных строках - PullRequest
0 голосов
/ 29 мая 2018

Здесь мое требование довольно удивительно, мне нужно обновить столбец той же таблицы ParentLinkID = LinkID, где Title равно ParentLinkTitle.Примечание: Title и ParentLinkTitle находятся в разных строках.Как можно обновить ParentLinkID, как упомянуто здесь?

CREATE TABLE #temp
(
LinkID INT,
Title NVARCHAR(100),
ParentLinkID INT,
ParentLinkTitle NVARCHAR(100)
)

INSERT INTO #temp
        ( LinkID ,
          Title ,
          ParentLinkID ,
          ParentLinkTitle
        )
VALUES  ( 1 , -- LinkID - int
          N'Dashboard' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Ecommerce'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 2 , -- LinkID - int
          N'User' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N''  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 3 , -- LinkID - int
          N'Ecommerce' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'User'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 4 , -- LinkID - int
          N'Shipping' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Business'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 5 , -- LinkID - int
          N'Product' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Dashboard'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 6 , -- LinkID - int
          N'Business' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Product'  -- ParentLinkTitle - nvarchar(100)
        );

SELECT * FROM #temp

--Base Table
LinkID  Title       ParentLinkID    ParentLinkTitle
1       Dashboard   0               Ecommerce
2       User        0   
3       Ecommerce   0               User
4       Shipping    0               Business
5       Product     0               Dashboard
6       Business    0               Product

Необходимо обновить столбец таблицы #temp выше ParentLinkID, как показано ниже:

--OUTPUT
LinkID  LinkTitle          IsActive ParentLinkID    ParentLinkTitle
1       Dashboard           1       3               Ecommerce
2       User        1       0       0
3       Ecommerce           1       2               User
4       Shipping            1       6               Business
5       Product             1       1               Dashboard
6       Business            1       5               Product

Ответы [ 3 ]

0 голосов
/ 29 мая 2018
UPDATE tmp

SET ParentLinkID = tmp1.LinkID
FROM temp  tmp
INNER JOIN temp as tmp1 ON tmp1.Title = tmp.ParentLinkTitle;

Чек http://sqlfiddle.com/#!18/58be7/5

0 голосов
/ 29 мая 2018

Вы можете сделать это без какого-либо соединения, как показано ниже:

update temp 
set ParentLinkID = isnull((select LinkID from temp t2 where t2.Title = temp.ParentLinkTitle),0)
0 голосов
/ 29 мая 2018

Вы можете попробовать самостоятельное соединение с помощью функции Left JOIN и coalesce, чтобы проверить, t2.LINKID есть или нет null

UPDATE t1
SET t1.ParentLinkID = coalesce(t2.LINKID,0)
FROM temp t1 LEFT JOIN temp t2
ON t1.ParentLinkTitle = t2.Title

sqlfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...