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

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

31.01.2025 15:13


13.04.2012 13:38
есть таблица 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
Приходные накладные?

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

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
А где в условиях была OPCODE?
Была только USEROP...
В принципе, в условия вложенного запроса ты можешь добавлять любые реквизиты таблицы SMDocuments.
С любыми условиями.
13.04.2012 14:46
Чуть-чуть поменяла запрос. (Вместо in поставила знак равенства).
Так работает?
13.04.2012 15:03
про 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
Ну да, я писала запрос прямо в браузере :)
Точно работает?
13.04.2012 16:10
Ага, точно работает... ну для РН понятно будет не WI а WO.
13.04.2012 16:19
Да, именно так.
Ну, и наверное, чтобы не обновлять впустую много записей можно сделать так:
Цитата:
update SMFINOBLIGATION set AcceptSum=0 where AcceptSum!=0 and (doctype, docid) =
(select doctype, id from SMDocuments where doctype="WI" and USEROP=21)
Часовой пояс GMT +3, время: 15:13.

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