kiran0624 Ответов: 1

Получаю ошибку SQL-запрос на обновление одной таблицы из двух таблиц


обновление одной таблицы из двух записей таблиц

поскольку я использую базу данных ingres.
Линия E_US0B70 1, агрегатные функции "Макс" не разрешено в данном контексте.

table_one, table_two и table_three

в table_one мне нужно обновить два столбца "дата" в качестве aprl_to_dt запросов и aprl_fr_dt

где aprl_to_dt из table_two в качестве столбца и aprl_fr_dt из table_three
поскольку записи дублируются, поэтому при необходимости Макс даты должен быть обновлен в table_one

Что я уже пробовал:

я уже пробовал

update table_one a
from table_two b , table_three c
set a.aprl_to_dt= b.aprl_fr_dt1,
a.aprl_fr_dt =  max(c.aprl_entdt) 
where b.aprl_cmpcd='01' and b.aprl_flag='CNF' and b.aprl_status='ECNF'
 and (b.aprl_fr_dt1 is not null or b.aprl_fr_dt1 !='')
 and b.aprl_cmpcd =a.aprl_cmpcd
and b.aprl_flag=a.aprl_flag and b.aprl_status = a.aprl_status
and b.aprl_empcd= a.aprl_empcd and b.aprl_due_dt = a.aprl_due_dt 
and b.aprl_empcd = c.aprl_empcd and b.aprl_cmpcd = c.aprl_cmpcd and b.aprl_due_dt = c.aprl_incdue
group by  b.aprl_empcd, b.aprl_fr_dt1, b.aprl_to_dt1;



я тоже пытался


update table_one a
from table_two b
set a.aprl_to_dt= b.aprl_fr_dt1,
a.aprl_fr_dt in (select max(c.aprl_entdt) from table_three c where
 b.aprl_empcd = c.aprl_empcd and b.aprl_cmpcd = c.aprl_cmpcd and b.aprl_due_dt = c.aprl_incdue
group by  b.aprl_empcd, b.aprl_fr_dt1, b.aprl_to_dt1)
where b.aprl_cmpcd='01' and b.aprl_flag='CPL' and b.aprl_status='ECPL'
 and (b.aprl_fr_dt1 is not null or b.aprl_fr_dt1 !='')
 and b.aprl_cmpcd =a.aprl_cmpcd
and b.aprl_flag=a.aprl_flag and b.aprl_status = a.aprl_status
and b.aprl_empcd= a.aprl_empcd and b.aprl_due_dt = a.aprl_due_dt



но
_US09C8 line 1, Syntax error on 'in'.  The correct syntax is:
    UPDATE table [alias]
       [FROM table {, ... }]
       SET column = expression|NULL {, ... }
       [WHERE search_condition]
     or:
     UPDATE table [alias]
       [FROM table {, ... }]
       SET (column,column,...) = (SELECT expr,expr,... FROM ... )
       [WHERE search_condition]

0x01AA

Не должно быть a.aprl_fr_dt in(select...) быть чем-то вроде a.aprl_fr_dt = (select...)?

Patrice T

А ошибка есть ?

1 Ответов

Рейтинг:
0

Gerry Schmitz

В обновлении "синтаксис" нет опции GROUP BY (как указано).

Вы делаете любое суммирование раньше; затем используйте "результирующий набор" в обновлении.


kiran0624

до этого я уже пробовал этот запрос

выберите b.aprl_fr_dt1, max(c.aprl_entdt)
из table_one a, table_two b, table_three c
где b.aprl_cmpcd='01' и b.aprl_flag='CNF' и b.aprl_status='ECNF'
и (b.aprl_fr_dt1 не является нулевым или b.aprl_fr_dt1 !=")
и b.aprl_cmpcd =a.aprl_cmpcd
и b.aprl_flag=a.aprl_flag и b.aprl_status = a.aprl_status
и b.aprl_empcd= a.aprl_empcd и b.aprl_due_dt = a.aprl_due_dt
и b.aprl_empcd = c.aprl_empcd и b.aprl_cmpcd = c.aprl_cmpcd и b.aprl_due_dt = c.aprl_incdue
группа по b.aprl_empcd, b.aprl_fr_dt1, b.aprl_to_dt1;

и успешно получил требуемое значение, это значение я пытаюсь обновить в table_three до этого идентификатора(равное условие).