Оператор SQL UPDATE для обновления столбца на основе другой существующей строки - PullRequest
3 голосов
/ 30 января 2012

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

Что я хочу сделать, это обновить Col4 на основе этой логики

  • если Col2 равен нулю, обновите Col4 с помощью Col3
  • если Col2 не равно NULL, найдите значение в Col1, которое соответствует значению в Col2. обновить col4 с соответствующим значением в col3

Например, с учетом этой таблицы:

| Col1 | Col2 | Col3 | Col4 |
-----------------------------
|  1   |   2  |  A1  |  2   |
-----------------------------
|  2   |   3  |  A2  |  3   |
-----------------------------
|  3   |{null}|  A3  |{null}|

Обновите это, чтобы быть этой таблицей

| Col1 | Col2 | Col3 | Col4 |
-----------------------------
|  1   |   2  |  A1  |  A2  |
-----------------------------
|  2   |   3  |  A2  |  A3  |
-----------------------------
|  3   |{null}|  A3  |  A3  |

Любое направление будет с благодарностью!

Ответы [ 2 ]

1 голос
/ 30 января 2012

Что-то вроде этого должно работать (не проверено):

UPDATE  table
SET     col4 = CASE WHEN table.col2 IS NULL THEN table.col3 ELSE col2Matches.col3 END
FROM    table
        INNER JOIN table AS col2Matches
            ON  table.col2 = col2Matches.col1

это должно позволить вам проверить это:

SELECT  CASE WHEN table.col2 IS NULL THEN table.col3 ELSE col2Matches.col3 END
FROM    table
        INNER JOIN table AS col2Matches
            ON  table.col2 = col2Matches.col1

Надеюсь, это поможет,

Пит

0 голосов
/ 30 января 2012

Нечто подобное может работать в Oracle.

update myTable
set col4 = case when col2 is null then col3
                else (select col3 from myTable where col1 = col2)
           end;

Конечно, если select col3 from myTable where col1 = col2 возвращает несколько строк, этот запрос не будет работать.Но я думаю, вы уже знаете, достаточно ли чисты ваши данные, чтобы это работало.

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