【发布时间】:2017-07-10 05:18:30
【问题描述】:
标题中的问题很难解释清楚。
我从一行中(或基于其中的值)插入 6 个值。 我还需要从第二行插入一个值,其中:
- 一列 (
ID) 中的值必须相等 - 主源行中列 (
CODE) 中的值必须为 IN (100,200),而另一行的值必须为 300 或 400 - 次行另一列 (
OBJID) 中的值必须是高于主行中的最小值。
源表如下:
OBJID | CODE | ENTRY_TIME | INFO | ID | USER
---------------------------------------------
1 | 100 | x timestamp| .... | 10 | X
2 | 100 | y timestamp| .... | 11 | Y
3 | 300 | z timestamp| .... | 10 | F
4 | 100 | h timestamp| .... | 10 | X
5 | 300 | g timestamp| .... | 10 | G
所以举个例子..
在我的第二个表中,我想插入OBJID、OBJID2、CODE、ENTRY_TIME、substr(INFO(...))、ID、USER
即在我的示例中,插入到第二个表中的行如下所示:
OBJID | OBJID2 | CODE | ENTRY_TIME | INFO | ID | USER
-----------------------------------------------------------
1 | 3 | 100 | x timestamp| substring | 10 | X
4 | 5 | 100 | h timestamp| substring2| 10 | X
我对仅来自一行的所有内容的插入工作正常。
INSERT INTO TABLE2
(ID, OBJID, INFO, USER, ENTRY_TIME)
SELECT ID, OBJID, DECODE(CODE, 100, (SUBSTR(INFO, 12,
LENGTH(INFO)-27)),
600,'CREATE') INFO, USER, ENTRY_TIME
FROM TABLE1
WHERE CODE IN (100,200);
我知道我需要在 TABLE1 上使用别名,但我不知道如何让其余部分正常工作,尤其是以一种有效的方式。现在有 200 万行,但一旦我开始使用生产数据,就会接近 2000 万行。
【问题讨论】:
-
比在这里给你一个解决方案更好,我建议你创建一个视图,把你所有的逻辑放在哪里,并以你想要的方式获得预期的输出。然后从这个新视图中执行插入语句作为选择。
-
您能帮我们完成输出表吗?请给我们所有的行。从当前的规范中很难理解你想要什么。
-
@FlorinGhita 如果我可以完成输出表,那么我首先不需要问这个问题。从我在第一个表中给出的示例行中,第二个表中只有一个可能的完整行。
-
@Slingy 我只需要你给的输入集。不是代码,而是测试数据。例如对于 objid = 4,对应的 objid2 是 5,不是吗?
-
@FlorinGhita 是的,实际上你是对的。我错过了。编辑了 OP。