Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle合并到(多个联接表)更新集(多个Where语句)返回无效的列规范_Oracle - Fatal编程技术网

Oracle合并到(多个联接表)更新集(多个Where语句)返回无效的列规范

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方法,使用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
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 ;