Как исправить оператор обновления с помощью функции max в предложении set - PullRequest
0 голосов
/ 17 января 2019

Я новичок в работе с sql-сервером, и сегодня я хочу установить пустое поле из моей таблицы utilizzi_oggetto с максимальным значением поля oggetto_pratica из таблицы trasco_quadri_imm; все это в то время как значение в столбце oggetto одинаково в обеих таблицах. В этом случае значение trasco_oggetti_pratica, равное нулю, станет равным 226217. Вот моя таблица trasco_quadri_imm

OGGETTO   OGGETTO_PRATICA
1429      20310
1429      20309
1429      22110
1429      22142
1429      22111
1429      22143
1429      22144
1429      176644
1429      226216
1429      226217

и моя таблица utilizzi_oggetto

OGGETTO     trasco_oggetto_pratica
1429         NULL

с первой попытки я попробовал

update uo 
  set trasco_oggetto_pratica = max(oggetto_pratica)
  from trasco_quadri_imm tqi, utilizzi_oggetto uo
  where uo.oggetto = tqi.oggetto and uo.trasco_oggetto_pratica is null

но, конечно, я не могу напрямую использовать функцию max в выражении set, поэтому я изменил запрос следующим образом:

update uo
set trasco_oggetto_pratica = tqi.maxop
from utilizzi_oggetto uo JOIN
    (select max(oggetto_pratica) as maxop from trasco_quadri_imm ) tqi
where uo.trasco_oggetto_pratica is null and uo.oggetto = tqi.oggetto

но выдает ошибку:

Неверное имя столбца 'oggetto'

Я также пытался поместить условие в условие on, но затем я получу ошибку синтаксиса рядом со словом on. Я не могу понять, в чем я ошибаюсь, и заранее благодарю вас за помощь.

1 Ответ

0 голосов
/ 17 января 2019

Это можно сделать с помощью CTE, оконной функции, такой как row_number(), outer apply, или просто с помощью производной таблицы, которая, вероятно, не так запутана для вас. Это то, что у вас изначально было, но вы забыли также вернуть столбец oggetto из производной таблицы, поэтому вы не смогли join на ней получить ошибку.

update uo
set uo.trasco_oggetto_pratica = tqi.OGGETTO_PRATICA
from utilizzi_oggetto uo
inner join 
    (select 
        max(OGGETTO_PRATICA) OGGETTO_PRATICA, 
        OGGETTO 
     from trasco_quadri_imm 
     group by OGGETTO) tqi on 
    tqi.OGGETTO = uo.OGGETTO 
...