Для каждой строки в PLSQL проверьте, существует ли определенное значение, и, если оно не существует, вставьте запись - PullRequest
0 голосов
/ 08 марта 2012

Мне нужно добавить много таблиц в таблицу, и мне нужна помощь, так как я начинаю работать с PL / SQL

У меня есть таблица с тремя столбцами (ID, KEY, VALUE).Идентификатор & KEY должен быть уникальным, и если для KEY с именем 'имя_процесса' нет значения, необходимо создать новый реестр, в котором значение должно совпадать с идентификатором.

, напримерЯ мог бы иметь это в своей таблице

ID      KEY            VALUE
A       cycles           4  
A       process_name     A
A       number           2
B       cycles           3
B       number           2
C       cycles           5

Итак, мне нужно было бы вставить 2 записи в БД:

B      process_name       B
C      process_name       C

Как мне начать создавать скрипт?

Спасибо

РЕШЕНИЕ

INSERT INTO my_table
   (SELECT distinct my_table.ID, 'process_name', my_table.ID
      FROM my_table
      WHERE my_table.ID NOT IN (SELECT distinct my_table.ID
                                 FROM my_table
                                 WHERE key = 'process_name'));  

1 Ответ

0 голосов
/ 08 марта 2012

Предполагая, что distinct_id не имеет значения nullable, вы можете использовать:

INSERT INTO your_table 
   (SELECT distinct id, 'process_name', id
      FROM your_table
     WHERE distinct_id NOT IN (SELECT distinct_id 
                                 FROM your_table
                                WHERE key = 'process_name'));

Если distinct_id имеет значение nullable, используйте NOT EXISTS вместо:

INSERT INTO your_table 
   (SELECT distinct id, 'process_name', id
      FROM your_table t_out
     WHERE NOT EXISTS (SELECT NULL
                         FROM your_table t_in
                        WHERE t_in.id = t_out.id
                          AND t_in.key = 'process_name'));
...