Вот как это происходит.
В Oracle вы не можете использовать такой синтаксис (кроме последнего delete
, который вы написали). Самый простой и, вероятно, самый простой запрос будет выглядеть примерно так:
delete from need_status_history h
where h.need_entl_puid in (select e.need_entl_puid
from need_entl e
where e.user_guid = 'x'
);
Как вы думаете, использовать один запрос для 4 удалений - ну, этого тоже не произойдет. Нет, если вы не поместите все из них в хранимую процедуру (или анонимный блок PL / SQL) и не запустите ее как таковую.
Судя по вашему комментарию, кажется, вы не совсем верите о чем я говорю - вот пример:
Примеры таблиц:
SQL> create table need_status_history (need_entl_puid number);
Table created.
SQL> create table need_entl (user_guid varchar2(10), need_entl_puid number);
Table created.
Ваш запрос:
SQL> delete from need_status_history
2 JOIN need_entl ON need_status_history.need_entl_puid= need_entl.need_entl_puid
3 where need_entl.user_guid='x';
JOIN need_entl ON need_status_history.need_entl_puid= need_entl.need_entl_puid
*
ERROR at line 2:
ORA-00933: SQL command not properly ended
Рекомендуемый запрос:
SQL> delete from need_status_history h
2 where h.need_entl_puid in (select e.need_entl_puid
3 from need_entl e
4 where e.user_guid = 'x'
5 );
0 rows deleted.
SQL>
Будучи убеждены