Проверить, существует ли перед вставкой в ​​другую таблицу - PullRequest
0 голосов
/ 26 мая 2020

enter image description here

Мне нужно прочитать текстовые данные, содержащие первую загрузку, которую кто-то делает, и вставить данные в 2 таблицы. это означает:

  1. В начале tab_data и tab_list пусто.
  2. с первой записью txt, я должен сначала проверить, существует ли «C43R» в таблице «tab_list», если нет, мне нужно вставить и получить новый идентификатор, а после этого вставить этот новый идентификатор, созданный в таблице tab_data, с остальной информацией.
  3. Со второй записью сначала я должен проверить, "C43R "Существуют в таблице" tab_list ", если они существуют, я должен получить идентификатор, а после этого вставить этот новый идентификатор, созданный в таблице" tab_data "с остальной информацией.
  4. с четвертой записью txt, у меня есть чтобы сначала проверить, существует ли «M23K» в таблице «tab_list», если нет, мне нужно вставить и получить новый идентификатор, а после этого вставить этот новый идентификатор, созданный в таблице «tab_data», с остальной информацией.

И то же самое со всеми строками из текстового файла.

Итак, как мне начать с этого?

Есть ли у кого-нибудь предложения или решение?

Действительно спасибо, привет

1 Ответ

0 голосов
/ 26 мая 2020

Это можно сделать двумя запросами. Лог c будет сначала загружать tab_list, затем tab_data. Обратите внимание, что вам нужен столбец упорядочивания в txt_data, чтобы это имело смысл - я принял id.

Это insert s в 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

Имея под рукой эту настройку, вы можете затем insert в tab_data:

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
...