Sql 基于其他表中的值更新表
这相当简单,我想更新一个表,但前提是满足另一个表中的条件。 我当前的查询:Sql 基于其他表中的值更新表,sql,oracle,Sql,Oracle,这相当简单,我想更新一个表,但前提是满足另一个表中的条件。 我当前的查询: UPDATE Table1 SET Table1.value='1234' WHERE ID IN ( (A sub query returning all the id's needed) ) 这种方法可以工作,但它会更新许多值。 问题在于还有第二个条件,即: AND Table2.value = 'Pudding' 但是,看到它是一个不同的表,它不工作。我不知道如何加入甲骨文。看过其他一些帖子,
UPDATE Table1
SET Table1.value='1234'
WHERE ID IN
(
(A sub query returning all the id's needed)
)
这种方法可以工作,但它会更新许多值。
问题在于还有第二个条件,即:
AND Table2.value = 'Pudding'
但是,看到它是一个不同的表,它不工作。我不知道如何加入甲骨文。看过其他一些帖子,但它们似乎与我的具体问题无关。尝试添加带有连接的From子句,我也在子查询中使用了该子句,但在oracle的update语句中找不到该子句
编辑:示例数据库
表1
ID Key1 Key2 Value
1 A1 B1 345
2 A1 B2 75
3 A2 B1 45
表2
Key1 Key2 Value
A1 B1 'Pudding'
A1 B2 'Pudding'
A2 B1 'Something else'
是的,表2也是子查询的一部分,但是其他6个表也是。我相信列出子查询的整个结构只会让人更加困惑,因为它会带来一系列已经可以正常工作的Id
但结果是,需要更新示例中的前两行 您可以尝试像这样与子查询一起使用,因为表中有两列需要比较
UPDATE Table1 t1
SET t1.Value = '1234'
WHERE t1.ID IN
(
--(A sub query returning all the id's needed)
)
and
exists (
select 1
from Table2 t2
where t1.Key2 =t2.Key2 and t1.Key1 =t2.Key1 and t2.Value = 'Pudding'
)
这是一个样本
CREATE TABLE Table1(
ID INT,
Key1 VARCHAR(50),
Key2 VARCHAR(50),
Value VARCHAR(50)
);
INSERT INTO Table1 VALUES (1,'A1','B1','345');
INSERT INTO Table1 VALUES (2,'A1','B2','75');
INSERT INTO Table1 VALUES (3,'A2','B1','45');
CREATE TABLE Table2(
Key1 VARCHAR(50),
Key2 VARCHAR(50),
Value VARCHAR(50)
);
INSERT INTO Table2 VALUES ('A1','B1','Pudding');
INSERT INTO Table2 VALUES ('A1','B2','Pudding');
INSERT INTO Table2 VALUES ('A2','B1','Something else');
UPDATE Table1 t1
SET t1.Value = '1234'
WHERE exists (
select 1
from Table2 t2
where t1.Key2 =t2.Key2 and t1.Key1 =t2.Key1 and t2.Value = 'Pudding'
)
查询1:
select * from Table1
| ID | KEY1 | KEY2 | VALUE |
|----|------|------|-------|
| 1 | A1 | B1 | 1234 |
| 2 | A1 | B2 | 1234 |
| 3 | A2 | B1 | 45 |
:
select * from Table1
| ID | KEY1 | KEY2 | VALUE |
|----|------|------|-------|
| 1 | A1 | B1 | 1234 |
| 2 | A1 | B2 | 1234 |
| 3 | A2 | B1 | 45 |
样本数据和期望的结果将非常有用。我看不出
Table2
与您的查询有什么关系。子查询是访问Table2
来获取ID,还是其他什么?这两张表有什么关联吗?是的,样本数据将有助于解释。@AlexPoole和Gordon我用样本数据更新了问题,并解释了为什么我没有进行整个子查询。这是可行的,但我有一个小问题。我以前从未使用过Exists,我想知道为什么“选择1”?该函数有什么功能?如果子查询返回至少一行,则为TRUE
<代码>选择1表示子查询中的条件匹配`