我有一个关注 SELECT
询问 -
SELECT C.CASE_TITL_NM,RA.V_CUST_NUMBER
FROM KDD_CASES C
JOIN FCT_RA RA
ON RA.N_RA_ID = C.RA_ID
WHERE UPPER(C.CNTRY_KEY_ID) LIKE '%MANUAL%'
AND C.SCORE_CT IN (99,100)
AND C.STATUS_CD = 'CCD'
AND C.CASE_TITL_NM NOT LIKE 'MANUAL%'
我需要更新 col
V_CUST_NUMBER
中的值列中的值 CASE_TITL_NM
所以我插上了我的 SELECT
内关注 UPDATE
语句并运行它只是为了得到 ORA01779 - UPDATE (
SELECT C.CASE_TITL_NM,RA.V_CUST_NUMBER
FROM KDD_CASES C
JOIN FCT_RA RA
ON RA.N_RA_ID = C.RA_ID
WHERE UPPER(C.CNTRY_KEY_ID) LIKE '%MANUAL%'
AND C.SCORE_CT IN (99,100)
AND C.STATUS_CD = 'CCD'
AND C.CASE_TITL_NM NOT LIKE 'MANUAL%'
) X
SET X.V_CUST_NUMBER = X.CASE_TITL_NM;
SQL Error: ORA-01779: cannot modify a column which maps to a non key-preserved table
01779. 00000 - "cannot modify a column which maps to a non key-preserved table"
*Cause: An attempt was made to insert or update columns of a join view which
map to a non-key-preserved table.
*Action: Modify the underlying base tables directly.
任何人都可以解释这个错误是什么意思,什么是正确的
UPDATE
询问?
最佳答案
它的意思是指定的查询结果在具有 RA 重复行的输出集中。看到一个 RA 行映射到两个不同的 C 行,您不能更新 RA,因为有可能尝试更新唯一的 RA 行以具有两个不同的值
您可以尝试使用 MERGE 语句,使用 SQL-that-writes-SQL 创建一堆 UPDATE 语句,或修改连接条件,以便输出中不存在来自 RA 的重复行并且覆盖来自 RA 的主键
关于sql - ORA-01779 无法修改映射到非键保留表的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53402273/