【问题标题】:Validate if exist before insert into another table在插入另一个表之前验证是否存在
【发布时间】:2020-09-12 14:38:12
【问题描述】:

我必须读取一个 txt 数据,其中包含某人所做的第一次加载,并将数据插入到 2 个表中。这意味着:

  1. 开头的tab_data和tab_list是空的。
  2. 对于第一个 txt 记录,我必须首先验证“tab_list”表中是否存在“C43R”,如果不存在,我必须插入并获取新 ID,然后插入在“tab_data”上创建的新 ID包含其余信息的表格。
  3. 对于第二条记录,首先我必须验证“tab_list”表上是否存在“C43R”,如果存在,我必须获取 ID,然后插入在“tab_data”表上创建的新 ID 和其余部分信息。
  4. 对于第四个 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_datainsert

    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
    

    【讨论】:

      猜你喜欢
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2019-10-07
      相关资源
      最近更新 更多