Обновите оператор в Teradata, используя qualify row_number (), чтобы обновить только одну строку, которая вызывает дубликаты - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь обновить недавно добавленный столбец (columnG) в таблице с именем TABLE1.

Чтобы заполнить этот новый столбец, я присоединяюсь к таблице подробностей с именем TABLE2, которая имеет columnG в нем.

Проблема, с которой я сталкиваюсь, заключается в том, что некоторые записи из TABLE1 будут дублироваться после присоединения к TABLE2 из-за отсутствия уникальности при согласовании TABLE1.columnZ=TABLE2.columnZ AND TABLE2.columnB = TABLE1.columnB.

Пока я хотел бы просто обновить один столбец, который изначально находится в TABLE1 до того, как произойдет логическое c с TABLE2, поэтому я добавил квалифицированную часть row_number() где он разделяется на уникальные столбцы первичного индекса TABLE1.

Когда я запускаю обновление, оно истекает и говорит, что у меня закончилось место в буфере и я ничего не обновлю! Я хотел бы посмотреть, как оптимизировать этот запрос или что мне нужно изменить, чтобы внести этот столбец.

UPDATE table1 
FROM ( 
  SELECT columna, columnb, columnc, columnd, columne, columnf 
  FROM table1 
  QUALIFY ROW_NUMBER() OVER (
    PARTITION BY columna, columnb, columnc, columnd, columne, columnf 
    ORDER BY columna, columnb, columnc, columnd, columne, columnf
  ) = 1 
) dup
SET columng = table2.columng 
WHERE table1.columnz = table2.columnz 
AND table2.columnb = table1.columnb 
AND table2.columnm = 'N' 
AND table2.comlunn = 'N' 
AND table2.columnl = 'Y' 
AND table1.columnz IS NOT NULL;
...