sql - 使用table2,table3 on(多个条件)合并到Table1?缺少语法
问题描述
我有和table1
,它们之间有一个关联条件。假设它是(ID)列。table2
table3
所以问题是,
在使用合并语句的情况下,是否可以将语法构造为:
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 中的一行?
解决方案
我应该如何调用两个表并使用它们来更新 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
;
注意:虽然此查询使用 OracleMERGE
语句,但它在概念上并未实现真正的合并操作。合并的概念是更新/插入查询,而此查询仅进行更新,而忽略插入部分。尽管如此,这是在 Oracle 中执行此类相关更新的最简单方法之一......
推荐阅读
- android-recyclerview - 分页库在 recyclerview 中没有显示任何内容
- django - 如何访问 django 中存储的用户数据?
- mongodb - 查询作为搜索值的子字符串的字段值
- php - 当用户通过雅虎应用程序登录时从雅虎获取用户电子邮件
- java - 是否可以在 Java 中调用 .NET Core 应用程序?
- c# - 如何在 C# 中的多列 ListView 中导入学生列表?
- python - 后台运行python,需要先接受用户输入
- encryption - 在 oracle 中加密和解密有困难
- android - 如何将 TextEdit 字段的输入保存到字符串中?
- assembly - 在 linux 中组装这段代码会给我语法错误