как обновить несколько строк одним оператором SQL, каждый из которых имеет свой статус - PullRequest
2 голосов
/ 07 октября 2009

Скажите, у меня есть эта таблица с двумя столбцами

 id  | column_test

 1   | NULL

 2   | NULL

 3   | NULL 

...

Как видите, столбец column_test теперь имеет значение NULL. Теперь я хочу сделать обновление этой таблицы, и окончательный статус должен выглядеть следующим образом:

 id  | column_test

 1   | a

 2   | b

 3   | c

...

Я мало знаю о составных выражениях SQL, похоже, что используемый запрос - это небольшая программа SQL, в которой, вероятно, будут задействованы локальные переменные. К сожалению, я еще не знаю точный синтаксис (я пытался создать запрос самостоятельно за последние 20-30 минут), может быть, я смогу найти здесь некоторых гуру SQL, чтобы помочь мне.

[править: давайте придерживаться mysql.]

Ответы [ 2 ]

1 голос
/ 07 октября 2009

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

UPDATE mytable
SET column_test = cola+colb/colc

Ближе к вашему вопросу, это должно работать

UPDATE mytable
SET column_test = Char (ASCII('a') + id-1)

Конечно, это будет работать только для ограниченного числа строк в вашей таблице.

0 голосов
/ 07 октября 2009

В MySQL:

CREATE TABLE mytable (id INT NOT NULL, column_test CHAR(1));

INSERT
INTO    mytable (id)
VALUES
(1),
(2),
(3),
(4);

SET @r := 0;
UPDATE  mytable
SET     column_test = CHAR(96 + (@r := @r + 1))
WHERE   column_test IS NULL
ORDER BY
        id;

SELECT  *
FROM    mytable;

В SQL Server:

WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    mytable
        WHERE   column_test IS NULL
        )
UPDATE  q
SET     column_test = CHAR(96 + rn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...