从SQL中的父元组中复制一个值

时间:2012-12-18 21:46:10

标签: sql sql-server sql-server-2008

我正在寻找一种将父元组中的值复制到子元素的优雅方法。我需要复制它,因为它可以独立于父值更改,但这是开始的基线。

以下是该表的简化版本:

CREATE TABLE Parent (
    Id INT NOT NULL PRIMARY KEY,
    ParentValue VARCHAR(128)
);


CREATE TABLE Child (
    Id INT NOT NULL PRIMARY KEY,
    ParentId INT NOT NULL FOREIGN KEY REFERENCES Parent(Id),
    ChildValue VARCHAR(128)
);

现在我要做的是:

   UPDATE Child
   SET ChildValue = Parent.ParentValue
   WHERE TRUE

这有意义吗?我有一个循环的方式,但它对我计划运行它的大量记录似乎没有效率。

2 个答案:

答案 0 :(得分:2)

您可以使用专有的UPDATE FROM语法

UPDATE Child
SET ChildValue = ParentValue
FROM Child
JOIN Parent ON Parent.Id = Child.ParentId;

或2008年的标准SQL MERGE语法

MERGE INTO Child
   USING Parent
      ON Parent.Id = Child.ParentId
WHEN MATCHED THEN
   UPDATE 
      SET ChildValue = ParentValue;

答案 1 :(得分:1)

编写查询的可移植方法是在set子句中使用相关子查询:

update child
    set childValue = (select ParentValue from Parent where Parent.ParentId = Child.ParentId)

我不知道你是否认为这很优雅。