MS SQL: 仅当数据记录不存在时更新

MS SQL: Update only if data record does not exist

我有一个 MSSQL table 具有以下列:

ID (int, unique), Name (varchar), Hobby (varchar)

"Hobby" 列允许 NULL 值。 table 有这些数据集(例如):

1, "John Doe", null
2, "Jack Doe", "racing"
3, "Mary Doe", "running"
4, "Mike Doe", null
5, "Mike Doe", "skiing"

我现在想做以下事情: 在 "Hobby" 列中用 "chilling" 替换空值,其中还没有另一个数据行存在 w/o 空值。 在伪代码中我想这样做:

UPDATE table SET Hobby = "chilling" WHERE Hobby is null and <nobody with the same name has a hobby already>

这意味着数据行 1 应该受到影响,但数据行 5 不应受到影响(以避免重复)。

这个问题我和我的同事们思考了很久,一直没有找到答案。

如何创建 SQL 语句来实现我想要实现的目标?

试试这个:

UPDATE t1
SET Hobby = "chilling" 
FROM table t1
WHERE Hobby IS NULL
AND NOT EXISTS(
    SELECT 1
    FROM Table t2
    WHERE t2.Name = t1.Name
    AND t2.Hobby IS NOT NULL
)

更新:

UPDATE tablename t1
SET Hobby = 'chilling' 
FROM t1
WHERE Hobby IS NULL
AND NOT EXISTS(
    SELECT 1
    FROM tablename t2
    WHERE t2.Name = t1.Name
)

Zohar 的回答有效,除了代码中的一些拼写错误:

UPDATE tablename t1
SET Hobby = 'chilling' 
FROM t1
WHERE Hobby IS NULL
AND NOT EXISTS(
    SELECT 1
    FROM tablename t2
    WHERE t2.Name = t1.Name
    AND t2.Hobby IS NOT NULL
)