根据条件将值插入并更新到表中

问题描述 投票:0回答:1

我有2张桌子:

表1:

EnrollmentTransaction
(PK均为列)

EnrollmentId | TransactionId
-------------+--------------
5            | 1
5            | 2
6            | 3
7            | 2
7            | 3
8            | 3
8            | 2
8            | 1
9            | 1

表 2:

EnrollmentDetail
(新添加的
TransactionId
列,默认值为 1,因为它不是空列) 在此表中 PK 为(EnrollmentId、ParameterId、SVCId 和 TransactionId)

EnrollmentId | ParameterId| SVCId| SVCValueId| TransactionId 
-------------+------------+------+-----------+--------------
5            | 1          | 57   | 21        | 1
6            | 8          | 58   | 24        | 1
7            | 9          | 57   | 21        | 1
7            | 6          | 58   | 29        | 1
8            | 8          | 57   | 21        | 1

通过参考表1,如果没有(EnrollmentId,TransactionId)的组合,我想插入,或者如果有基于

EnrollmentId
的条目,则更新。

例如:

场景 1

EnrollmentId = 5
表 1 中有 2 个条目,而表 2 只有 1 个条目,我必须在表 2 中插入值为 5、1、57、21、2 的一行。我不应该进行任何更改表 1 现有组合行 (5, 1, 57, 21, 1)。因为它与 Enrollment Id 和 TrnasactionId 的组合相匹配。

场景2

EnrollmentId = 6
在表1和表2中都只有1个条目,但两个表中的TransactionId不同。所以我现在必须参考表1的TransactionId并在表2中更新。主要是TrasnactionId将是从表1更新的最终值。该行的最终值将是6、8、58、24和3。

场景3

EnrollmentId = 9
在表1中只有1个条目,在表2中没有找到条目。所以我不应该插入/更新这个组合。

逻辑考虑。

  1. 当表1只有一个条目时,则检查表2是否 存在 EnrollmentId。
  • 如果表 2 中没有找到条目,则无需执行任何操作。
  • 如果表2中存在多个条目,则更新 表 2 中这些记录对应的 transnactionID。
  1. 当表 1 中存在多个条目时,请检查表 2 中是否存在 EnrollmentId。
  • 如果表 2 中没有找到条目,则无需执行任何操作。
  • 如果表 2 中找到单个条目,则更新/插入 表2中的记录匹配TransactionId和的组合 EnrollmentId 以及 ParameterId、SVCID 和 SVCValueId 的值。比如最终结果表中EnrollmentId 5。
  • 如果表2中有多个条目,则表2中的每个条目 必须与表1的组合相匹配。就像final中的enrollmentId 7一样 结果表。

注意:表 1 中每个注册 ID 的可能组合为 3 个值。即 1、2 或 3。

这是一次性活动,直到生产为止。

最终结果如下。

EnrollmentId | ParameterId| SVCId| SVCValueId| TransactionId  
-------------+------------+---------------------------------
5            | 1          | 57   | 21        | 1
5            | 1          | 57   | 21        | 2
6            | 8          | 58   | 24        | 3
7            | 9          | 57   | 21        | 2
7            | 6          | 58   | 29        | 2
7            | 9          | 57   | 21        | 3
7            | 6          | 58   | 29        | 3
8            | 8          | 57   | 21        | 1
8            | 8          | 57   | 21        | 2
8            | 8          | 57   | 21        | 3

是否有可能编写单个查询来实现此目的?我必须在同一个查询中实现插入和更新。

注:Oracle 19 是数据库。

sql database oracle plsql
1个回答
0
投票

这令人担忧。

TransactionId
新添加的列,默认值为1,因为它不是空列)

这听起来像是你的逻辑设计需要改进。

© www.soinside.com 2019 - 2024. All rights reserved.