Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Сложный Update таблицы SMFINOBLIGATION, который бы сравнивал SMDocuments.ID=SMFINOBLIGATION.DOCID и SMDocuments.USEROP=21 : Oracle

19.03.2024 7:34


13.04.2012 13:38
Starter
 
есть таблица SMFINOBLIGATION,
поля: DO DOCID CLIENTINDEX OURSELFCLIENT ACCEPTSUM BASESUM BEGINDATE CALCENDDA PAYMENTDELAY I FINEPERCENT FINELIMIT PAYMENTPRTY I BORNIN COMMENTARY

таблица SMDocuments
с интересующими нас полями ID и USEROP

Можно как нибудь сделать сложный Update таблицы SMFINOBLIGATION, который бы сравнивал SMDocuments.ID=SMFINOBLIGATION.DOCID и SMDocuments.USEROP=21

т.е. Update SMFinObligation set AcceptSum=0 where …….;
вот что писать в Where ? в первой таблице есть DOCID, во второй - ID=DOCID первой и поле USEROP, по которому нужно проверку делать.
13.04.2012 13:48
Mtirt
 
Приходные накладные?

Код:
update SMFINOBLIGATION set AcceptSum=0 where (doctype, docid) =
(select doctype, docid from SMDocuments where doctype="WI" and USEROP=21)
13.04.2012 14:36
Starter
 
Немного другой запрос (оригинальный не работает, точнее отбирает все накладные, без фильтра по коду операции):

update SMFINOBLIGATION set ACCEPTSUM = 0 where (docid in (select id from SMDocuments where doctype='WI' and SMDocuments.USEROP in (21,25,26,27,30,31))) AND (SMFINOBLIGATION.BEGINDATE =TO_DATE('02.04.12','DD.MM.RR'));

Дату можно убрать, это для проверки, и список операции из списка.
13.04.2012 14:44
Mtirt
 
А где в условиях была OPCODE?
Была только USEROP...
В принципе, в условия вложенного запроса ты можешь добавлять любые реквизиты таблицы SMDocuments.
С любыми условиями.
13.04.2012 14:46
Mtirt
 
Чуть-чуть поменяла запрос. (Вместо in поставила знак равенства).
Так работает?
13.04.2012 15:03
Starter
 
про OPCODE опечатался, имелось в виду USEROP
со знаком равенства не работает, ORA-01427: single-row subquery returns more than one row.
Ну и в SMDocuments поле не DOCID а просто ID, работать будет where (doctype, docid) in (select doctype, id from SMDocuments where doctype='WI' and USEROP=21)
13.04.2012 15:36
Mtirt
 
Ну да, я писала запрос прямо в браузере :)
Точно работает?
13.04.2012 16:10
Starter
 
Ага, точно работает... ну для РН понятно будет не WI а WO.
13.04.2012 16:19
Mtirt
 
Да, именно так.
Ну, и наверное, чтобы не обновлять впустую много записей можно сделать так:
Цитата:
update SMFINOBLIGATION set AcceptSum=0 where AcceptSum!=0 and (doctype, docid) =
(select doctype, id from SMDocuments where doctype="WI" and USEROP=21)
Часовой пояс GMT +3, время: 07:34.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.