2016-09-17 2 views

ответ

1

Это проблема обзора. Oracle не распознает внешний псевдоним запроса более одного уровня вложенности.

Если мы предположим, что значения в обеих таблицах, то вы можете использовать LEAST() с подзапросов:

UPDATE table1 t 
    SET t.columnA = LEAST((SELECT MIN(columnB) 
          FROM table2 
          WHERE table2.fk = t.pk 
          ), 
          (SELECT MIN(columnB) 
          FROM table3 
          WHERE table2.fk = t.pk 
          ) 
         ); 

Если нет, то вы можете изменить ваш запрос, перемещая положение корреляции из одного уровня:

UPDATE table1 t 
    SET t.columnA = (SELECT MIN(columnB) 
        FROM ((SELECT table2.fk, columnB FROM table2 
          ) UNION ALL 
          (SELECT table3.fk, columnB FROM table3 
          ) 
         ) tt 
        WHERE tt.fk = t.pk 
        ); 
+0

Второй - это то, что мне нужно. Почему я не думал об этом? :) Большое спасибо. – Cantillon