如何根据表的整行更新列

时间:2016-12-08 12:10:25

标签: sql-server

我有一个包含colunm parentId的表(没有约束,可能会发生这个id不存在,因为数据不好!!!)。 我想做两件事 添加一个位列IsChild - 仅当它具有ParentId并且实际存在于我的表中时才包含true 添加位列IsParent - 仅在引用子

时才包含true

我想出类似的东西:

UPDATE MyTable
  Set IsParent = 1
  WHERE Id in (select distinct parentId from MyTable) and IsParent = 0
UPDATE MyTable
  Set IsChild = 1
  WHERE parentId in (select id from MyTable) and IsChild = 0

但它很慢!!!不知道我们如何才能让它更快

奖金问题:MyTable是一个时态表 如果我们可以立即更新所有字段,而不是创建与语句

一样多的条目

1 个答案:

答案 0 :(得分:1)

您可以尝试更新加入。如果MyTableIdparentId列都有索引,那么这将是理想的。

UPDATE t1
SET IsParent = 1
FROM MyTable t1
INNER JOIN MyTable t2
    ON t1.Id = t2.parentId
WHERE isParent = 0

UPDATE t1
SET IsChild = 1
FROM MyTable t1
INNER JOIN MyTable t2
    ON t1.parentId = t2.Id
WHERE isChild = 0