1

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

这是该表的简化版本:

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

这有意义吗?我有一种循环方式,但对于我计划运行它的大量记录来说,它似乎效率不高。

4

2 回答 2

2

您可以使用专有UPDATE FROM语法

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

或 2008 年的标准 SQLMERGE语法

MERGE INTO Child
   USING Parent
      ON Parent.Id = Child.ParentId
WHEN MATCHED THEN
   UPDATE 
      SET ChildValue = ParentValue;
于 2012-12-18T21:49:11.897 回答
1

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

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

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

于 2012-12-18T21:53:38.037 回答