Как сделать UPDATE с условием по нескольким таблицам

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
scanner
Постоянный обитатель
Сообщения: 192
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Кемерово, ОАО "Мелькорм"
Контактная информация:

Как сделать UPDATE с условием по нескольким таблицам

Сообщение scanner »

Нужно выполнить в SQL запросе что-то вроде

update from SPSTEP, STEPDOC, BASEDOC where (SPSTEP.CSTEPDOC = STEPDOC.NREC) and
(STEPDOC.CBASEDOC = BASEDOC.NREC) and
(BASEDOC.DIRECT = 1) and
(SPSTEP.PRMC = 2) and
((SPSTEP.CMCUSL = 400195FCC06367B7h) or
(SPSTEP.CMCUSL = 0000000000000027h) or
(SPSTEP.CMCUSL = 4001BDDBF47D32D8h)) and (BASEDOC.DFORM >= '01/03/2005')
set SPSTEP.WMCPROP := 1;

сделано по аналогии с SELECT, но суппорт на такую формулировку ругается.
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

Попробуй следующую конструкцию:
update
katsopr
where
((...
))
set katsopr.csopr := comp(0)
;
Нужно указать таблицу какую update'ишь....
oiko
Местный житель
Сообщения: 418
Зарегистрирован: 29 мар 2005, 17:49

Сообщение oiko »

Так пробовали
update SPSTEP where (SPSTEP.CSTEPDOC = STEPDOC.NREC) and
(STEPDOC.CBASEDOC = BASEDOC.NREC) and
(BASEDOC.DIRECT = 1) and
(SPSTEP.PRMC = 2) and
((SPSTEP.CMCUSL = 400195FCC06367B7h) or
(SPSTEP.CMCUSL = 0000000000000027h) or
(SPSTEP.CMCUSL = 4001BDDBF47D32D8h)) and (BASEDOC.DFORM >= '01/03/2005')
set WMCPROP := 1;
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение Sheinina »

oiko писал(а): update SPSTEP where (SPSTEP.CSTEPDOC = STEPDOC.NREC) and
(STEPDOC.CBASEDOC = BASEDOC.NREC) and
(BASEDOC.DIRECT = 1) and
(SPSTEP.PRMC = 2) and
((SPSTEP.CMCUSL = 400195FCC06367B7h) or
(SPSTEP.CMCUSL = 0000000000000027h) or
(SPSTEP.CMCUSL = 4001BDDBF47D32D8h)) and (BASEDOC.DFORM >= '01/03/2005')
set WMCPROP := 1;
попробуйте:
update SPSTEP where
((
SPSTEP.CSTEPDOC == STEPDOC.NREC and
STEPDOC.CBASEDOC == BASEDOC.NREC
))
and
(BASEDOC.DIRECT = 1) and
(BASEDOC.DFORM >= '01/03/2005') and
(SPSTEP.PRMC = 2) and
(
(SPSTEP.CMCUSL = 400195FCC06367B7h) or
(SPSTEP.CMCUSL = 0000000000000027h) or
(SPSTEP.CMCUSL = 4001BDDBF47D32D8h)
)
set spstep.WMCPROP := 1;
Не сильно изменила, но все же...
scanner
Постоянный обитатель
Сообщения: 192
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Кемерово, ОАО "Мелькорм"
Контактная информация:

Сообщение scanner »

Sheinina спасибо по вашему совету все работает. Главное что без двойных скобок не применяется.
Ответить