更新 SQL 中的表,使重复值相同,但唯一值不同

问题描述 投票:0回答:1

我有以下 SQL 选择语句:

SELECT DISTINCT
    t3.*, t2.ItemPathwayGUID
FROM 
    SearchComplianceBuildCodeCat t1
INNER JOIN 
    SearchProductComplianceDraft t2 ON t1.SearchComplianceBuildCodeCatID = t2.SearchComplianceBuildCodeCatID
INNER JOIN 
    SearchComplianceBuildCodeCat t3 ON t1.SearchComplianceBuildCodeCatID_Parent = t3.SearchComplianceBuildCodeCatID
WHERE
    t1.SearchComplianceBuildCodeCatLevel = 3
    AND t1.Visible = 1
    AND t3.Visible = 1

这将返回 29 行,每行 1000 多行。目前,

t2.ItemPathwayGUID
设置为空,因为它是新添加的列。我希望列的值等于
NEWID()
。但是,对于相同的行,此值必须相同。

例如:

行A 行B 行C ItemPathwayGUID
123 A1 T4 7FD6073F-7747-4BD9-838A-3789235D2749
123 A1 T4 7FD6073F-7747-4BD9-838A-3789235D2749
ABC B3 G2 D7F906BF-66D1-450F-9E4B-61447CF91517
123 A1 T4 7FD6073F-7747-4BD9-838A-3789235D2749
321 F0 U6 60993525-3153-4AA0-8D82-8D61E024E043
  • 第 1、2、4 行应更新为具有相同的
    ItemPathwayGUID
  • 第 3 行和第 5 行应更新为具有自己唯一的 id

我已经尝试在选择上进行更新,但是这似乎是在更新每一行以具有新的 guid 而不是重复行的 id,导致 select distinct 命令返回所有 1000 多行而不是我想要的 29 行。

这可能吗?

sql-server select ssms distinct
1个回答
0
投票

您可以使用

MERGE
语句和函数调用,如下所示:

MERGE INTO w_uuid t USING(                 
  SELECT DISTINCT
    rowA
  , rowB
  , rowC
  FROM w_uuid
) s ON s.rowA = t.rowA
   AND s.rowB = t.rowB
   AND s.rowC = t.rowC
WHEN MATCHED THEN UPDATE
  SET ItemPathwayGUID = NEWID()
;
© www.soinside.com 2019 - 2024. All rights reserved.