2016-04-07 3 views
0

Я не могу получить следующий связанный с оракулом запрос для выполнения обновлений только в подразделении записей. В настоящее время он обновляет все записи.Связанный запрос на обновление

У меня есть таблица (TBL_REQUESTS), который выглядит следующим образом:

request_id employee_id status 
------------------------------------ 
1    1000 
1    1001 
2    1003 
2    1004 
2    1005 
3    1006 

У меня есть мнение (VW_STATUS), который выглядит следующим образом:

employee_id status 
--------------------- 
1000   failed 
1001   closed 
1002   open 
1003   open 
1004   close 
1005   open 
1006   open 

Я пытаюсь написать заявление UPDATE, что будет обновите поле статуса сотрудников в TBL_REQUESTS с их соответствующим статусом от VW_STATUS, где TBL_REQUESTS.request_id равно переданному значению. Дополнительная морщина заключается в том, что в VW_STATUS может быть более 1 записи на одного сотрудника, однако если это создает проблему, я всегда могу найти способ исправить это в VIEW.

Эта попытка обновляется каждую строку в TBL_REQUESTS:

UPDATE TBL_REQUESTS r1 
SET r1.status = 
    (SELECT s.status 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 
WHERE EXISTS 
    (SELECT s.status 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 

ответ

1

Я думаю, что лучший способ, чтобы написать этот запрос может быть это -

UPDATE TBL_REQUESTS r1 
SET r1.status = 
    (SELECT s.status 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 
WHERE r1.employee_id in 
    (SELECT s.employee_id 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 

Это должно ограничить запрос работать только на employee_ids что have request_id = 2.

+1

Это выглядит лучше, чем моя версия - однако, если сотрудник появляется более чем в одном запросе, не будет ли он обновлять их там тоже? Это облегчит это? 'ОБНОВЛЕНИЕ TBL_REQUESTS г1 SET r1.status = (SELECT s.status ОТ VW_STATUS сек внутреннее соединение TBL_REQUESTS R2 на s.employee_id = r2.employee_id ГДЕ rd2.request_id = 2) ГДЕ r1.employee_id в (SELECT s.employee_id FROM VW_STATUS s INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id WHERE rd2.request_id = 2) и r1.request_id = 2' edit - не реализовали ввод сохраненных комментариев. – MidnightThoughtful

+0

Да, это, безусловно, было бы. Кроме того, если мой запрос помог ответить на ваш вопрос, пожалуйста, отметьте мой ответ как правильный. –

Смежные вопросы