我正在寻找一种将父元组中的值复制到子元素的优雅方法。我需要复制它,因为它可以独立于父值更改,但这是开始的基线。
以下是该表的简化版本:
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
这有意义吗?我有一个循环的方式,但它对我计划运行它的大量记录似乎没有效率。
答案 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)
我不知道你是否认为这很优雅。