这很简单,我想更新一个表,但前提是要满足另一个表中的条件。 我目前拥有的查询:
UPDATE Table1
SET Table1.value='1234'
WHERE ID IN
(
(A sub query returning all the id's needed)
)
这种工作方式,但它会更新为许多值。 问题是存在第二个条件,即:
AND Table2.value = 'Pudding'
但是看到它是另一个表,那是行不通的。而且我不知道如何将其加入Oracle。看过其他一些帖子,但它们似乎与我的特定问题无关。尝试添加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'
是的,Table2也是子查询的一部分,但是其他6个表也是如此。我相信,列出子查询的整个结构只会让您更困惑,因为它会带回一系列已经很好用的ID。
但是结果是示例中的前两行需要更新。
答案 0 :(得分:2)
您可以尝试对此类子查询使用exists,因为表中需要比较两列。
moment(your_date, 'DD-MM-YYYY').add('month', 1)
这是一个样本
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'
)
查询1 :
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'
)
Results :
select * from Table1