【发布时间】:2019-05-04 15:39:55
【问题描述】:
我有一张桌子
ID ID2 VARIABLE VA_VAL
1 100 F_NAME ABC
1 102 QUAL 01
1 103 CODE 1923
2 100 F_NAME BCD
2 102 QUAL 02
2 103 CODE 2034
3 100 F_NAME CDE
3 102 QUAL 01
3 103 CODE 5436
-
如果 ID2 = 102 且 VARIABLE = QUAL 且 VA_VAL = 01,则插入 ID2 = 104, VARIABLE = NEW_CD1 and VA_VAL = (VA_VAL of (ID2 = 103 and VARIABLE = CODE))
另外,删除相同 ID 的行(ID2 = 102 和 VARIABLE = QUAL 和 VA_VAL = 02)和(ID2 = 103 和 VARIABLE = CODE)。
-
如果 ID2 = 102 且 VARIABLE = QUAL 且 VA_VAL = 02,则插入 ID2 = 103, VARIABLE = NEW_CD2 and VA_VAL = (VA_VAL of (ID2 = 103 and VARIABLE = CODE))
另外,删除相同 ID 的行(ID2 = 102 和 VARIABLE = QUAL 和 VA_VAL = 02)和(ID2 = 103 和 VARIABLE = CODE)。
输出表如下:
ID ID2 VARIABLE VA_VAL
1 100 F_NAME ABC
1 104 NEW_CD1 1923
2 100 F_NAME BCD
2 105 NEW_CD2 2034
3 100 F_NAME CDE
3 104 NEW_CD1 5436
有没有办法在 Oracle SQL 中高效地做到这一点?我的表中有超过 5000 万条记录。
【问题讨论】:
-
AFAIK 不可能在单个语句中执行插入和删除操作。因此,您可能需要多个语句来执行此操作。
-
我就是这么想的。也许合并查询,例如 - stackoverflow.com/a/55965864/893394。但我不知道考虑到数据的大小它的效率如何。