我有table1
,table2
和table3
,
它们之间存在关联条件。
假设它是(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中的一行?
答案 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中执行此类相关更新的最简单方法之一。