更新其中有重复的列

UPDATE where have duplicated colums

我想知道如何更新重复列的值。

例子我有这个

ColumnA ColumnB ColumnC Repeated?
NAMEA 111 1234 No
NAMEC 222 5678 No
NAMEB 222 5678 No

我需要将列(重复?)更改为 YES WHERE ColumnB 和 ColumnC 等于,如下所示:

ColumnA ColumnB ColumnC Repeated?
NAMEA 111 1234 No
NAMEC 222 5678 Yes
NAMEB 222 5678 Yes

我试过了

UPDATE [MY_TABLE]
    SET [Repeated?] = 'Yes'
FROM [MY_TABLE] as A
INNER JOIN
(
    SELECT ColumnA, ColumnC
    FROM [MY_TABLE]
    GROUP BY ColumnA, ColumnC
) as B
ON B.ColumnC = A.ColumnC, B.ColumnA = B.ColumnA

但这没有用。有人可以帮忙吗?

我认为这应该可以解决问题

UPDATE yt1
    SET Repeated= (CASE WHEN yt2.ColumnA IS NULL THEN 'No' ELSE 'Yes' END)
FROM YourTable yt1
LEFT OUTER JOIN YourTable yt2
    ON yt1.ColumnB = yt2.ColumnB AND yt1.ColumnC = yt2.ColumnC
WHERE yt1.ColumnA <> yt2.ColumnA

您的解决方案实际上比您接受的解决方案更好(一旦您更正了错误)。因为 INNER JOIN 意味着您不会更新除需要更改为 'Yes' 的行以外的任何行,而您接受的答案会更新 ALL 中的行 tableun-necessarily。您遇到的问题是

  • 您使用 AND 而非 , 组合连接条件。
  • 您的第二个连接条件是将同一列与其自身进行比较。
  • 你的第二个连接条件应该是 ColumnB 而不是 ColumnA
  • 您不需要 sub-query 来加入 table 本身。
  • 但最重要的是您没有添加条件来防止行连接到自身。
UPDATE A
    SET [Repeated?] = 'Yes'
FROM [MY_TABLE] AS A
INNER JOIN [MY_TABLE] AS B
ON B.ColumnC = A.ColumnC
    AND B.ColumnB = A.ColumnB
    -- The next condition prevents a row matching itself
    AND B.ColumnA <> A.ColumnA;

备注:

  1. 使用 FROM 更新 table 时,您 UPDATE 别名不是 table 名称。
  2. 最佳做法是不要使用需要转义的字符来命名列,例如[Repeated?] 只需使用 Repeated(或者我会使用 IsRepeated)。
  3. 您最好在需要时查询它,而不是每次更改时都必须更新 table。