我有两个表Table_A和Table_B Table_A具有列Id和描述 Table_B包含列Id,描述和状态。 现在,我必须更新Table_A中的描述列,以获取具有匹配ID和状态值的记录' U'在表_中。我使用了以下查询
更新Test_A SET test_a.description =(SELECT test_b.description 来自Test_B Test_A.id = Test_B.id 并且Test_B.Status =' U') EXISTS(SELECT id 来自Test_B 在哪里test_a.id = test_b.id);
但是这个查询不仅更新了匹配ID和状态为“U”的记录,还更新了Table_A中的其他行,描述为null。我在更新之前和更新之后有一些示例数据
ID |说明|
1 | A |
2 | B |
3 | C |
ID |说明|状态|
1 | AA | N |
3 | CC | U |
运行查询后,我得到以下结果
ID |说明|
1 | AA |
2 | B |
3 | (null)|
由于ID 3的标志不是' U',因此不从Table_B中选择,而是在Table_A中更新。但我期待单独使用Id 1的Table_A记录更新,所有其他记录保持不变。有人可以帮我确定哪里出错了吗?
答案 0 :(得分:1)
您需要在where子句中添加额外条件:
Update Test_A
SET test_a.description
= (SELECT test_b.description From Test_B Where Test_A.id = Test_B.id And Test_B.Status='U')
Where EXISTS (SELECT id From Test_B WHERE test_a.id = test_b.id And Test_B.Status='U');
如果TEST_B中没有NULL描述,您可以尝试这样做:
Update Test_A
SET test_a.description
= NVL((SELECT test_b.description From Test_B Where Test_A.id = Test_B.id And Test_B.Status='U'), test_a.description);
在这种情况下,所有行都将更新,但如果相关子查询返回NULL,则旧值将保留