Upsert两个表的连接(具有1到多个关系)

时间:2014-09-12 18:38:18

标签: sql database oracle

我正在使用Oracle DB并且需要在两个表上执行Upsert,但我正在努力解决这个问题。以下是两个表的简化版本:

  • 表1:税务记录(税务记录ID int,税务类别ID int,Vintage ID int)
  • 表2:税控(税簿ID int,税务记录ID int,税 费率ID int)

税务记录ID是唯一的,但是对于每个税务记录ID,可以有多个税簿(每个税务记录的税簿数量各不相同)。

现在,我需要在这两个表上执行upsert。我将把两个表从一个数据库移动到另一个数据库。我计划使用Merge语句来执行此操作。然而ON条件是我遇到麻烦的地方。这就是合并的规则:

  • 每个税簿具有相同税级,年份和相同税率的税务记录应合并。

合并税级和年份不是问题。但我无法弄清楚如何检查每本税簿的税率。在我的编程思想中,我知道我必须执行类似于foreach循环的东西。但我不知道如何将其转换为sql命令。

如果需要,我可以制作虚拟表格。但我想尽量减少我必须运行的不同查询的数量。我作为备份的一种方法是使用PL / SQL完成整个过程。但我更愿意,如果它可以通过sql完成,因为我将不得不学习PL / SQL,我的同事也将在未来需要和修改这个SQL。他们知道SQL,但也不知道PL / SQL。

以下是目前的代码:

Merge INTO tax_record tr
USING (Select * from tax_record@anotherdb, tax_control@anotherdb
  where tax_control@anotherdb.tax_record_id = tax_record@anotherdb.tax_record_id) tc
ON tr.tax_class_id = tax_record@anotherdb.tax_class_id
  AND tr.vintage = tax_record@anotherdb.vintage
  AND ______?______
WHEN NOT MATCHED THEN
INSERT (tr.data1, tr.tax_record_id, tr.vintage, tr.tax_class_id)
values (tc.data1, tc.tax_record_id, tr.vintage, tr.tax_class_id)

在?马克,我想实现每个税簿检查的税率。这就是我需要帮助

0 个答案:

没有答案