我有两个具有父/子关系的表。我想用孩子的数据更新父母。但是,假设有 2 个孩子,我希望能够根据孩子的其他列来选择哪个孩子用于更新。
这是我到目前为止所拥有的:
父级:@test
孩子:@exdat
预期结果,更新后父级的结果应仅包含大写字母。我想用子级的一些数据更新父级,但如果存在多个数据,我宁愿选择 p1 优于 p2、p2 优于 p3 和 p3 优于 p4 的子级
DECLARE @test TABLE
(
id int,
val char(1)
);
DECLARE @exdat TABLE
(
id int,
dval char(1),
dimp char(2)
);
INSERT INTO @test (id,val)
SELECT 1,'a'
UNION ALL SELECT 2,'b'
UNION ALL SELECT 3,'c'
UNION ALL SELECT 4,'d'
UNION ALL SELECT 5,'e'
UNION ALL SELECT 6,'f'
UNION ALL SELECT 7,'g'
;
INSERT INTO @exdat (id,dval,dimp)
SELECT 1,'A','p1'
UNION ALL SELECT 2,'B','p3'
UNION ALL SELECT 3,'C','p1'
UNION ALL SELECT 4,'D','p2'
UNION ALL SELECT 5,'E','p2'
UNION ALL SELECT 6,'F','p3'
UNION ALL SELECT 7,'w','p2'
UNION ALL SELECT 7,'g','p3'
UNION ALL SELECT 7,'G','p1'
UNION ALL SELECT 7,'z','p4'
;
UPDATE @test SET
val = e.dval
FROM
@test t
INNER JOIN @exdat e ON t.id = e.id
;
SELECT * FROM @test;
Result:
1 A
2 B
3 C
4 D
5 E
6 F
7 w <-- problem illustrated here
这个“w”可以是 w、g、G、z 中的任何一个值。所以我问如何根据其他列确定子选择的优先级?