как обновить столбец таблицы со значениями внутри? - PullRequest
0 голосов
/ 08 апреля 2019

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

UPDATE table_name
SET    t1.type_name = t2.type_name
FROM   table_name t1
INNER JOIN (
    SELECT DISTINCT progID, type_name 
    FROM table_name 
    WHERE type_name <>''
) t2 ON t1.progID = t2.progID
WHERE t1.type_name <>''

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Это правильный синтаксис:

UPDATE table_name t1 
INNER JOIN (select distinct progID, type_name from table_name where type_name <>'') t2 
ON t1.progID = t2.progID 
SET t1.type_name = t2.type_name
WHERE t1.type_name <> ''

Вам не нужно предложение FROM.Но вы уверены, что хотите обновить столбец type_name со значением?Возможно, измените последнее условие на:

WHERE t1.type_name IS NULL
0 голосов
/ 08 апреля 2019

Я бы с осторожностью использовал select distinct в подзапросе, потому что вы все еще можете получить дубликаты.Просто используйте group by, чтобы гарантировать, что подзапрос генерирует только одну строку на ProgId:

UPDATE table_name t JOIN
       (SELECT progID, MAX(type_name) as type_name
        FROM table_name 
        WHERE type_name <> ''
        GROUP BY progID
       ) tt
       ON t.progID = tt.progID
    SET t.type_name = tt.type_name
FROM table_name t1
WHERE t1.type_name <> '';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...