【问题标题】:Validate if exist before insert into another table在插入另一个表之前验证是否存在
【发布时间】:2020-09-12 14:38:12
【问题描述】:
我必须读取一个 txt 数据,其中包含某人所做的第一次加载,并将数据插入到 2 个表中。这意味着:
- 开头的tab_data和tab_list是空的。
- 对于第一个 txt 记录,我必须首先验证“tab_list”表中是否存在“C43R”,如果不存在,我必须插入并获取新 ID,然后插入在“tab_data”上创建的新 ID包含其余信息的表格。
- 对于第二条记录,首先我必须验证“tab_list”表上是否存在“C43R”,如果存在,我必须获取 ID,然后插入在“tab_data”表上创建的新 ID 和其余部分信息。
- 对于第四个 txt 记录,我必须首先验证“tab_list”表中是否存在“M23K”,如果不存在,我必须插入并获取新 ID,然后插入在“tab_data”上创建的新 ID包含其余信息的表格。
txt 文件中的所有行也是如此。
那么我该如何开始呢?
有没有机构有建议或解决方案?
非常感谢,问候
【问题讨论】:
标签:
sql
oracle
plsql
oracle-sqldeveloper
oracle-apex
【解决方案1】:
您可以通过两个查询来做到这一点。逻辑是首先提供tab_list,然后提供tab_data。请注意,您需要在 txt_data 中设置一个排序列,这才有意义 - 我假设为 id。
将此inserts 转换为tab_list,同时手动生成从10 开始的序列。
insert into tab_list(id, tab)
select tab_id, 9 + row_number() over(order by min(id))
from txt_data
group by tab_id
有了这个设置,您就可以在tab_data 中insert:
insert into tab_data (id, tab_id, data)
select
99 + row_number() over(order by d.id),
l.id,
d.data
from txt_data d
inner join tab_list l on l.tab_id = d.tab_id