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;

MERGEまたは2008年の標準SQL構文

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 に答える