Обновить синтаксис с объединениями - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь обновить столбец только с соответствующим условием.

update table1 set col=Match
where id in(select id from
table1,table2 where table1.id=table2.id);

В нем говорится, что команда sql неправильно завершена.

1 Ответ

0 голосов
/ 03 июня 2019

Вот пример, который показывает, что делать (по крайней мере, я так понял, основываясь на вопросе и комментариях, которые вы разместили).

Сначала тестовый пример:

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

Посмотрите, поможет ли это.

...