【问题标题】:Update Table having two different column with same value in different rows更新表在不同行中具有两个具有相同值的不同列
【发布时间】:2018-05-29 06:35:15
【问题描述】:

在这里,我的要求非常惊人,需要更新同一个表的列 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

【问题讨论】:

    标签: sql sql-server tsql sql-update


    【解决方案1】:

    您可以尝试 self join 使用 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

    【讨论】:

      【解决方案2】:
      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

      【讨论】:

        【解决方案3】:

        你也可以像下面这样在没有任何连接的情况下做到这一点:

        update temp 
        set ParentLinkID = isnull((select LinkID from temp t2 where t2.Title = temp.ParentLinkTitle),0)
        

        【讨论】:

          猜你喜欢
          • 2021-11-18
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-04
          • 2021-07-29
          相关资源
          最近更新 更多