我想知道如何更新重复列的值。
示例
columnna | ColumnB | ColumnC | 重复? | 对 | 111 | 1234 | 没有 |
---|---|---|---|
NAMEC | 222 | 5678 | 没有 |
NAMEB | 222 | 5678 | 没有 |
你的解决方案实际上比你接受的那个更好(只要你改正了错误)。因为INNER JOIN
意味着您不更新任何行,除了那些需要更改为'Yes'的行,而您接受的答案更新ALL表中的行没有必要。你的问题是
- 使用
AND
而不是,
来组合连接条件。 - 你的第二个连接条件是比较同一列本身。
- 第二个连接条件应该是ColumnB而不是columnna
- 不需要子查询来连接表本身。
- 但最重要的是,你没有添加一个条件来阻止行加入到自己。
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;
指出:
- 当使用
FROM
更新表时,UPDATE
是别名而不是表名。 - 最佳实践是不要使用需要转义的字符来命名列,例如
[Repeated?]
,只需使用Repeated
(或者我会使用IsRepeated
)。 - 你最好在你需要的时候查询它,而不是每次它改变时都更新表。
我想这应该能成功
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