我有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 中每个注册 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 是数据库。
这令人担忧。
(
新添加的列,默认值为1,因为它不是空列)TransactionId
这听起来像是你的逻辑设计需要改进。