【发布时间】:2018-11-16 21:52:14
【问题描述】:
我有table FOO,在col N_RA_ID 中有一些ID 值,在col V_CUST_NUMBER 中有一些MANUAL% 值,在col N_RA_ID 中有一些匹配值,在col V_CUST_NUMBER 中有非手动值。这是示例数据-
我想在col N_RA_ID 上自我加入,只要有完全匹配的地方,我想update N_RA_ID 到null WHERE V_CUST_NUMBER LIKE 'MANUAL%'
所以输出应该看起来像 -
我尝试使用合并但得到 ORA-38104。有人可以帮忙吗?
MERGE INTO FOO X
USING (
SELECT T1.V_CUST_NUMBER AS MAN_CUST,T1.N_RA_ID, T2.V_CUST_NUMBER
FROM FOO T1
JOIN FOO T2
ON T1.N_RA_ID = T2.N_RA_ID
AND UPPER(T1.V_CUST_NUMBER) NOT LIKE 'MANUAL%'
) Z
ON (X.N_RA_ID = Z.N_RA_ID)
WHEN MATCHED THEN UPDATE
SET X.N_RA_ID = null
WHERE UPPER(X.V_CUST_NUMBER) LIKE 'MANUAL%'
SQL Error: ORA-38104: Columns referenced in the ON Clause cannot be updated: "X"."N_RA_ID"
38104. 00000 - "Columns referenced in the ON Clause cannot be updated: %s"
*Cause: LHS of UPDATE SET contains the columns referenced in the ON Clause
*Action:
【问题讨论】:
-
完全匹配是什么意思?你能分享你尝试使用合并的查询吗
-
@ikram - 完全匹配,我的意思是
N_RA_IDself 加入的任何地方。我已经添加了我运行过的MERGE语句。
标签: sql oracle sql-update oracle12c