Есть ли оператор SQL, который позволяет мне копировать и вставлять существующие строки, но с одним изменением столбца? - PullRequest
1 голос
/ 28 февраля 2012

Возможно, вы не поняли, что я хочу спросить из названия, но вот объяснение.

У меня есть данные в таблице базы данных Oracle. Что я хотел сделать, это вставить новые данные в таблицу. Эти новые данные основаны на существующих данных, но я должен изменить значение одного столбца. Таким образом, если после вставки у меня будет 10 строк в базе данных, у меня будет 20 строк, но новые 10 строк содержат те же данные, за исключением того, что изменяется один из столбцов.

Eg таблица перед вставкой новых данных

 Col1   Col2    Col3

  a       b       AA

  1       2       33

таблица после вставки новых данных

 Col1   Col2    Col3

  a       b       **BB**

  1       2       **44**

Ответы [ 2 ]

4 голосов
/ 28 февраля 2012

Это будет зависеть от того, как вы определите, как изменить данные. Откуда, например, вы знаете, что AA должно стать BB или 33 должно стать 44?

Примерно так будет работать для двух выложенных вами дел. Вы можете адаптировать его к любому желаемому правилу, изменив оператор CASE, чтобы по-другому вычислить новое значение.

INSERT INTO table_name( col1, col2, col3 )
  SELECT col1,
         col2,
         (CASE WHEN col3 = 'AA' 
                 THEN 'BB'
               WHEN col3 = '33'
                 THEN '44'
               ELSE null
            END)
    FROM table_name;
4 голосов
/ 28 февраля 2012

При условии, что вы можете закодировать, каким должно быть новое значение;да.

INSERT INTO
  myTable (
    Col1,
    Col2,
    Col3
  )
SELECT
  Col1,
  Col2,               -- This is a specific example based on your comment.
  Col3 + 6            -- This just adds 6 to the existing value, but any SQL
FROM                  -- could actually go here, such as a CASE statement...
  myTable

Итак, возникает вопрос;У вас есть правила, которые вы можете реализовать в SQL для расчета нового значения для Col3?

Правила могут быть такими простыми, как ...

CASE WHEN Col3 = 'AA' THEN '**BB**'
     WHEN Col3 = '33' THEN '**44**'
                      ELSE 'Unknown'
END,

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

INSERT INTO
  myTable (
    Col1,
    Col2,
    Col3
  )
SELECT
  OldTable.Col1,
  OldTable.Col2,
  COALESCE(NewTable.Col3, 'Unknown')
FROM
  myTable     AS OldTable
LEFT JOIN
  lookup      AS NewTable
    ON  OldTable.Col1 = NewTable.Col1
    AND OldTable.Col2 = NewTable.Col2

Илицелая куча других опций.

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