почему запрос на обновление обновляет две записи каждый раз? - PullRequest
0 голосов
/ 09 мая 2018

Я создаю одно приложение, в котором я хочу сохранить все последние данные time_out в столбце time_out_history на основе текущей даты, для которого я создал запрос запроса работает нормально, но проблема в том, что он всегда обновляет всю запись

EMPLOYEE_ID--       VARCHAR2(30 BYTE)
TIME_IN--           TIMESTAMP(6) WITH LOCAL TIME ZONE
TIME_OUT--          TIMESTAMP(6) WITH LOCAL TIME ZONE
WORKING_HOUR--      VARCHAR2(30 BYTE)
PUNCH_DATE--        DATE
TIME_OUT_HISTORY--  VARCHAR2(200 BYTE)

и мой запрос:

 UPDATE EMPLOYEE_LOGIN_TIME T1 SET T1.TIME_OUT_HISTORY=
  (SELECT pk.TIME_OUT FROM EMPLOYEE_LOGIN_TIME pk WHERE trunc(punch_date)=trunc(SYSDATE))

1 Ответ

0 голосов
/ 09 мая 2018

Ваша команда:

UPDATE EMPLOYEE_LOGIN_TIME T1 
  SET T1.TIME_OUT_HISTORY= (SELECT pk.TIME_OUT 
                              FROM EMPLOYEE_LOGIN_TIME pk 
                             WHERE trunc(punch_date)=trunc(SYSDATE)
                           ) ;

Здесь через внутренний SELECT вы ищете действительное значение, которое будет присвоено T1.TIME_OUT_HISTORY. Вы можете найти какое-то значение или нет, и в этом случае результат выбора будет null.

Чтобы обновить только те записи, которые вы хотите обновить, ваша команда должна выглядеть примерно так:

UPDATE EMPLOYEE_LOGIN_TIME T1 
  SET T1.TIME_OUT_HISTORY= (SELECT pk.TIME_OUT 
                              FROM EMPLOYEE_LOGIN_TIME pk 
                             WHERE trunc(punch_date)=trunc(SYSDATE)
                           )
WHERE T1.<column name> ....
  AND T1.<column name> .... ;

Добавленный WHERE определяет правила, которые будут использоваться при выборе записей из EMPLOYEE_LOGIN_TIME, которые должны быть обновлены.

Как это проясняет ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...