使用联接更新语法

时间:2019-06-03 07:12:38

标签: sql oracle oracle-sqldeveloper

我正在尝试仅在匹配条件下更新列。

state

它说sql命令未正确结束。

1 个答案:

答案 0 :(得分:0)

下面是一个示例,该示例显示了如何做(至少,根据您发布的问题和评论,这就是我的理解)。

首先测试用例:

SQL> create table table1 (id number, criteria varchar2(10));

Table created.

SQL> create table table2 (id number);

Table created.

SQL> insert into table1 (id)
  2    select 1 from dual union all
  3    select 2 from dual;

2 rows created.

SQL> insert into table2 (id)
  2    select 1 from dual;

1 row created.

如您所见,两个表共享ID = 1,因此我们希望它的table1.criteria被修改。

您的查询:

SQL> update table1 set
  2    criteria = 'M1'
  3  where id in (select a.id
  4               from table1 a join table2 b on a.id = b.id
  5              );

1 row updated.

SQL> -- Result
SQL> select * From table1;

        ID CRITERIA
---------- ----------
         1 M1
         2

或者:

SQL> update table1 a set
  2    a.criteria = 'M2'
  3  where exists (select null
  4                from table2 b
  5                where b.id = a.id
  6               );

1 row updated.

SQL> select * From table1;

        ID CRITERIA
---------- ----------
         1 M2
         2

看看是否有帮助。