Oracle合并到(多个联接表)更新集(多个Where语句)返回无效的列规范
我是甲骨文的新手。我正在尝试使用MERGE-INTO方法,使用SELECT DISTINCT语句中的值更新表的值。我想根据有条件地使用表中的内容更新表的值。 我想要的是一个简单的图表Oracle合并到(多个联接表)更新集(多个Where语句)返回无效的列规范,oracle,Oracle,我是甲骨文的新手。我正在尝试使用MERGE-INTO方法,使用SELECT DISTINCT语句中的值更新表的值。我想根据有条件地使用表中的内容更新表的值。 我想要的是一个简单的图表 MERGE INTO update_table ut USING (SELECT DISTINCT t1.column_1 ,t2.column_2 FROM table_1 t1 INNER JOIN table_2 t2 ON t1.foreign_key = t2.primary_key) st O
MERGE
INTO update_table ut
USING
(SELECT DISTINCT
t1.column_1
,t2.column_2
FROM table_1 t1
INNER JOIN table_2 t2
ON t1.foreign_key = t2.primary_key) st
ON (ut.pk = st.column_1)
WHEN MATCH UPATE
SET(ut.update_column = st.column_2
WHERE st.column_1 = 1
AND st.column_2 = 1
,ut.update_column = st.column_2
WHERE st.column_1 = 2
AND st.column_2 = 2);
但是,当我这样做时,我在使用SET的行上得到了无效的列规范错误。如何解决此问题以成功更新表格,最好是在ANSI标准中?您可以使用子句本身将您在
中的where
子句中添加的条件包括在的所选列列表中。这样地。(未测试。您在where
条款中的条件不合适)
您可以使用
子句本身将您在where
子句中添加的条件包括在的选定列列表中。这样地。(未测试。您在where
条款中的条件不合适)
好的,如果我理解正确的话,这意味着在这种情况下我不能使用where语句。我需要已经有了正确的数据集,而不是依赖update语句中的where子句。@Jizzle21013:如果愿意,可以在更新时包括ut.column\u name=value
的where子句。但对于源表,最好在using子句本身中限制它。好的,如果我理解正确,这意味着在这种情况下我不能使用where语句。我需要已经有了正确的数据集,而不是依赖update语句中的where子句。@Jizzle21013:如果愿意,可以在更新时包括ut.column\u name=value
的where子句。但对于源表,最好将其限制在using子句本身中。
MERGE
INTO update_table ut
USING (SELECT DISTINCT
t1.column_1 ,
CASE
WHEN t1.column_1 = 1
AND t2.column_2 = 1
THEN t2.column_1
WHEN t1.column_1 = 2
AND t2.column_2 = 2
THEN t2.column_2
END column_2
FROM
table_1 t1
INNER JOIN table_2 t2 ON t1.foreign_key = t2.primary_key
) st
ON (ut.pk = st.column_1)
WHEN MATCHED THEN
UPDATE SET ut.update_column = st.column_2 ;