在多个条件下使用table2和table3合并到Table1中?语法缺失

时间:2018-12-13 19:26:10

标签: sql oracle plsql oracle10g sqlplus

我有table1table2table3, 它们之间存在关联条件。 假设它是(ID)列。

问题是,

在使用merge语句的情况下,是否可能  构造这样的语法:

Merge into Table1 

using table2 , table3
on (table1.ID = Table2.ID , Table2.ID = Table.ID) 
when match then 
update --(definitly table1)
where
table1.something between table2.something and table2.something -- whatever :)
when not match then 
do_nothing  --I think I should type NULL here 

如果此语法错误,我应该如何调用两个表并使用它们来更新table1中的一行?

1 个答案:

答案 0 :(得分:1)

  

我应该如何调用两个表并使用它们来更新table1中的一行?

这可以在Oracle中以多种方式实现:

  • 相关子查询
  • 内联视图
  • 合并查询

以下代码给出了第三个解决方案的原始注释示例(合并语句)。由于您没有向我们展示您的确切SQL尝试和表的结构,因此您必须将其调整为适合您的确切用例:

MERGE INTO table1 target
-- prepare the dataset to use during the UPDATE
USING (
    SELECT 
        -- following fields will be available in the UPDATE
        t1.id,
        t2.foo,
        t3.bar
    FROM
        -- JOIN conditions between the 3 tables
        table1 t1
        INNER JOIN table2 t2 on t2.id = t1.id
        INNER JOIN table3 t3 on t3.id = t1.id
    WHERE
       -- WHERE clause (if needed)
        t1.zoo = 'blah'
    ) source
-- search records to UPDATE 
ON  (target.id = source.id)
WHEN MATCHED THEN 
    UPDATE SET
        -- UPDATE table1 fieds
        target.value1 = source.foo,
        target.value2 = source.foo
;

注意:尽管此查询使用Oracle MERGE语句,但从概念上讲它并未实现真正的合并操作。合并的概念是更新/插入查询,而此查询仅进行更新,而忽略插入部分。尽管如此,这是在Oracle中执行此类相关更新的最简单方法之一。