Oracle: копировать строку при обновлении одного поля - PullRequest
13 голосов
/ 22 июня 2010

Обратите внимание: я am задаю вопрос, на который хочу ответить. Я знаю, что этот вопрос означает, что база данных настроена плохо. Поэтому я буду голосовать за любые ответы, которые предлагают изменить способ накрытия стола.

Мне нужно продублировать несколько строк при изменении одного значения.

name   col1 col2
dave   a    nil
sue    b    nil
sam    c    5

должно стать:

name   col1 col2
dave   a    nil
dave   a    a
sue    b    nil
sue    b    a
same   c    5

IE для всех записей в этой таблице, где col2 is null, создайте новую запись в таблице, где name и col1 - скопированные, а col2 - a.

Ответы [ 3 ]

17 голосов
/ 22 июня 2010

Использование:

INSERT INTO table
  (name, col1, col2)
SELECT t.name, t.col1, 'a'
  FROM TABLE t
 WHERE t.col2 IS NULL

Предполагается, что ни столбцы name, ни col1 не являются первичными ключами или имеют уникальное ограничение либо на

.
3 голосов
/ 22 июня 2010

Будет ли это делать?

INSERT INTO yourtable
       (SELECT name, col1, 'a'
          FROM yourtable 
         WHERE col2 is NULL);
0 голосов
/ 06 февраля 2014

Если количество столбцов велико, вы можете скопировать нужные данные во временную таблицу, изменить данные во временной таблице так, как вам нужно, затем скопировать содержимое временной таблицы обратно в оригинал и удалить временная таблица.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...