SQL - заполнить столбец значения на основе условия - PullRequest
0 голосов
/ 04 апреля 2020

У меня sql таблица выглядит следующим образом

enter image description here

Я хотел бы обновить столбец сообщений с помощью альфы, если это ID 1058 и 2045 с Браво и 3899 с Чарл ie.

Идентификатор и Сообщение будут отличаться все время, когда мы импортируем плоский файл. Это не всегда будет 1058 2045 3899 и альфа чарл ie браво.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 04 апреля 2020

Вы можете попробовать следующее обновление:

UPDATE yourTable t1
SET Message = (SELECT t2.Message FROM yourTable t2
               WHERE t2.ID = t1.ID AND t2.Message IS NOT NULL)
WHERE
    Message IS NULL;

Это обновление предназначается для всех записей, имеющих сообщение NULL (отсутствует), и заменит это сообщение значением, отличным от NULL из записи. имея тот же ID. Обратите внимание, что мы могли бы также написать эту логику c, используя объединение обновлений, но точный синтаксис будет зависеть от вашей конкретной базы данных, которую вы не упомянули.

Для SQL Сервер, вот один из способов сделать это, используя update join logi c:

WITH cte AS (
    SELECT t1.Message AS msgTarget, t2.Message AS msgSource
    FROM yourTable t1
    INNER JOIN yourTable t2 ON t2.ID = t1.ID
    WHERE t1.Message IS NULL AND t2.Message IS NOT NULL
)

UPDATE cte
SET msgTarget = msgSource;
0 голосов
/ 04 апреля 2020

Вам нужно сделать условное обновление с объединением. Зависит от двигателя, но пример будет как ниже


UPDATE  A
Set A.Message=B.Message
From Table A
INNER JOIN  
(Select distinct id, message from table) B
ON A.id=B.id
Where A.Message is null

0 голосов
/ 04 апреля 2020

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

, если это не решит вашу проблему, возможно, потребуются некоторые изменения уровня структуры базы данных.

...