Я работаю над оператором обновления, где мне нужно обновить неверные идентификаторы с правильным. Ниже мой код: Принимая правильный и неправильный код в летучем таблице:TDWM filter voilation: Bad Unconstrained product Присоединиться
CREATE VOLATILE TABLE VT
AS
(
SELECT
NAME
,DESC
,FIRST_VALUE(CODE)
OVER (PARTITION BY NAME,DESC,SRC_TYPE_CD
ORDER BY CODE) AS CORRECT_CODE
,CODE AS INCORRECT_CODE
,SRC_TYPE_CD
FROM DB.CPT
QUALIFY
COUNT(*)
OVER (PARTITION BY NAME,DESC,SRC_TYPE_CD
ORDER BY CODE
ROWS UNBOUNDED PRECEDING) > 1
) WITH DATA
ON COMMIT PRESERVE ROWS;
Создание таблицы как исходная для целей тестирования:
CREATE TABLE DP_DB.CE_TEST AS
(SELECT * FROM DB.EVNT WHERE
SRC_TYPE_CD='CRM' and CODE is not null)
WITH DATA AND STATS
ON COMMIT PRESERVE ROWS;
Обновления CE_TEST с летучим столом :
update a from DP_DB.CE_TEST a, vt b
set CODE= b.CORRECT_CODE where
a.CODE in (select b.INCORRECT_CODE from VT)
Данное обновление не работает с нарушением прав пользователя. У меня нет другого столбца соответствия в двух таблицах. Что еще я могу сделать, чтобы оптимизировать этот запрос?
Ниже приводится пример из VT:
Name Desc CORRECT_CODE INCORRECT_CODE SRC_TYPE_CD
700 Calls Service 100 592 601 CRM
700 Calls Service 100 592 595 CRM
700 Calls Service 100 592 597 CRM
700 Calls Service 100 592 598 CRM
700 Calls Service 100 592 594 CRM
Спасибо,
Amit
Не можете просто использовать 'Обновление от DP_DB.CE_TEST а, б В.Т. множества КОД = b.CORRECT_CODE где a.CODE = b.INCORRECT_CODE и а. NAME = b.NAME и a. DESC = b. DESC и a.SRC_TYPE_CD = b.SRC_TYPE_CD' Это похоже на то, как вы разделяете CREATE TABLE. Конечно, это предполагает, что комбинация этих 4 столбцов уникальна. – dnoeth
Hi Dnoeth, Я не могу использовать это состояние: и a. NAME = b.NAME и a. DESC = b. DESC и a.SRC_TYPE_CD = b.SRC_TYPE_CD как имя и desc, отсутствуют в другой таблице. Использование = condtion не дало правильный результат для образца, который я тестировал. Любой другой вариант? Я думал о попытке слияния. – user3901666
Если ваш код не терпел неудачу из-за TASM, он потерпел неудачу с ошибкой, подобной «целевой строке, обновленной несколькими исходными строками». Каждая строка в вашей целевой таблице должна обрабатывать ровно одну строку в источнике. Не знаю, как это получится в вашем случае. – dnoeth