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
)
我有一个 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
)