根据另一个表中的值更新表

时间:2018-08-31 10:53:13

标签: sql oracle

这很简单,我想更新一个表,但前提是要满足另一个表中的条件。 我目前拥有的查询:

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。

但是结果是示例中的前两行需要更新。

1 个答案:

答案 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