Table is specified twice, both as a target for 'UPDATE' and as a separate source for data

215
28 апреля 2018, 18:41

Есть запрос

UPDATE ClientPolicy 
  SET endDate = (
    select min(c.begDate) -  INTERVAL 1 day from ClientPolicy c
    where  
      ClientPolicy.client_id = c.client_id AND c.id > ClientPolicy.id
  ) 
WHERE exists (
  select 1 from ClientPolicy c
  where
    ClientPolicy.client_id = c.client_id AND c.id > ClientPolicy.id ) AND
    (policyType_id BETWEEN 1 AND 2) AND
    deleted <> 1;  

он выдает ошибку:

Table is specified twice, both as a target for 'UPDATE' and as a separate source for data

Делал подзапросы с временным отношением и сэлфджоином, сэлфджоин не работает ( 1 картинка), на второй картинке без сэлфджоина, внешнуюю таблицу не видит ( очевидно). Как можно исправить? :

Answer 1
UPDATE ClientPolicy 
 SET endDate = ( select min(c.begDate) -  INTERVAL 1 day from (SELECT * FROM ClientPolicy) c
  where  ClientPolicy.client_id = c.client_id AND c.id > ClientPolicy.id ) 
  WHERE exists (select 1 from (SELECT * FROM ClientPolicy) c
 where ClientPolicy.client_id = c.client_id AND c.id > ClientPolicy.id )AND (policyType_id BETWEEN 1 AND 2)AND deleted <> 1;

Решено

READ ALSO
Ошибка при компиляции библиотеки boost

Ошибка при компиляции библиотеки boost

Пытаюсь из библиотеки boost использовать float128Подключаю так:

181
Как принудительно завершить поток?

Как принудительно завершить поток?

С помощью async запускаю в main поток, в котором крутится бесконечный циклКак завершить этот поток?

187
Удаление бинарного дерева

Удаление бинарного дерева

Имеются функции:

143
Помогите разобраться с исключениями C++

Помогите разобраться с исключениями C++

Проблема в том чтобы после выполнения исключения Owerwriting программа продолжила работу и копировала файл,у меня она просто выдает исключение...

194