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

Sql server MS SQL:仅在数据记录不存在时更新,sql-server,conditional,Sql Server,Conditional,我有一个包含以下列的MSSQL表: ID (int, unique), Name (varchar), Hobby (varchar) “嗜好”列允许空值。 该表包含以下数据集(例如): 我现在想做以下工作: 在“Hobby”列中,将空值替换为“chilling”,因为该列中还没有另一个不带空值的数据行。 在伪代码中,我想这样做: UPDATE table SET Hobby = "chilling" WHERE Hobby is null and <nobody with the sa

我有一个包含以下列的MSSQL表:

ID (int, unique), Name (varchar), Hobby (varchar)
“嗜好”列允许空值。 该表包含以下数据集(例如):

我现在想做以下工作: 在“Hobby”列中,将空值替换为“chilling”,因为该列中还没有另一个不带空值的数据行。 在伪代码中,我想这样做:

UPDATE table SET Hobby = "chilling" WHERE Hobby is null and <nobody with the same name has a hobby already>
UPDATE table SET Hobby=“chilling”,其中Hobby为null,且
这意味着数据行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
)
更新:
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
)

还有一件事:如果我有多个第1行的副本,它们都会得到“chilling”值。我在问题中没有明确说明这一点,但我不希望出现这种行为。我只想要一个“第1行”的条目来获得令人毛骨悚然的嗜好。
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
)
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
)