Обновлять определенный столбец с данными из столбца table1 в столбец table2 только в том случае, если предложение where совпало с использованием оракула SQL - PullRequest
0 голосов
/ 16 апреля 2019

Я ищу помощь для запроса Oracle SQL для обновления table1 column3 с table2 column3 на основе предложения where, где table3 column1 равно table2 column1, а table2 column2 равно table1 column2.Затем обновите table1 column3 на table2 column2.У меня есть около 500 записей, мне нужно обновить только для конкретных условий условия.

Я пробовал ниже запрос, но не повезло.Любая помощь приветствуется:

UPDATE t1 set t1.column3= t2.column3
FROM table1 t1
INNER JOIN table1 t1, table2 t2, table3 t3 on t3.column1 = t2.column1
AND t1.column2 = t2.column2
and t1.date between to_date('20190415 00:00:00', 'yyyymmdd hh24:mi:ss') 
AND to_date('20190415 15:59:59', 'yyyymmdd hh24:mi:ss');

Я ожидаю, что запрос будет выполняться только между определенными датами.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Ваш столбец 3 в таблице t1 определен с ненулевым ограничением. Вы можете попробовать использовать ненулевое предложение во внутренних запросах или использовать функцию NVL для замены значений NULL подходящим значением.

update table1 t1
    set column3 = (select t2.column3
                   from table2 t2 join
                        table3 t3
                        on t3.column1 = t2.column1
                   where t1.column2 = t2.column2 and
                         t1.date >= date '2019-04-05' and
                         t1.date < date '2019-04-16' and 
                         t2.column3 is not null
                  )
where exists (select t2.column3
              from table2 t2 join
                   table3 t3
                   on t3.column1 = t2.column1
              where t1.column2 = t2.column2 and
                    t1.date >= date '2019-04-05' and
                    t1.date < date '2019-04-16' and
                    t2.column3 is not null
             );
0 голосов
/ 16 апреля 2019

Вы, кажется, хотите что-то вроде этого:

update table1 t1
    set column3 = (select t2.column3
                   from table2 t2 join
                        table3 t3
                        on t3.column1 = t2.column1
                   where t1.column2 = t2.column2 and
                         t1.date >= date '2019-04-05' and
                         t1.date < date '2019-04-16'
                  );

EDIT:

Если не все строки соответствуют условиям, необходимо повторить запрос в where:

update table1 t1
    set column3 = (select t2.column3
                   from table2 t2 join
                        table3 t3
                        on t3.column1 = t2.column1
                   where t1.column2 = t2.column2 and
                         t1.date >= date '2019-04-05' and
                         t1.date < date '2019-04-16'
                  )
where exists (select t2.column3
              from table2 t2 join
                   table3 t3
                   on t3.column1 = t2.column1
              where t1.column2 = t2.column2 and
                    t1.date >= date '2019-04-05' and
                    t1.date < date '2019-04-16'
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...