powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
6 сообщений из 6, страница 1 из 1
UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
    #39584878
pmb17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть таблица, в которой нужно обновить по некому условию (WHERE d._fld16100rref <> E'\\x88b1001e672dd19011e53b498262f721'::bytea) три поля, причем одно поле вычисляется на основе данных других таблиц
У меня получился вот такой UPDATE:
Код: sql
1.
2.
3.
4.
5.
6.
7.
UPDATE _document585 AS ud 
SET (_fld16089, _fld16100rref, _fld16086rref) = 
(COALESCE(dd.comment, ud._fld16089), COALESCE(dd.ref_org, ud._fld16100rref), COALESCE(dd.ref_kkm, ud._fld16086rref)) 
FROM 
(SELECT d._idrref as _idrref, r1._fld2318::mvarchar || ' ' || r2._fld26273::mvarchar AS comment, E'\\x00000000000000000000000000000000'::bytea AS ref_org,  E'\\x00000000000000000000000000000000'::bytea AS ref_kkm  
FROM _document585 as d left join _reference137 as r1 on d._fld16100rref = r1._idrref left join _reference92 as r2 on d._fld16086rref = r2._idrref WHERE d._fld16100rref <> E'\\x88b1001e672dd19011e53b498262f721'::bytea) AS dd
WHERE dd._idrref = ud._idrref;



который выполняет то что нужно, но если убрать COALESCE в операторе SET

SET (_fld16089, _fld16100rref, _fld16086rref) = (dd.comment, dd.ref_org, dd.ref_kkm)
то получаю ошибку:
ОШИБКА: нулевое значение в столбце "_fld16089" нарушает ограничение NOT NULL
ПОДРОБНОСТИ: Ошибочная строка содержит (\xb902001a64a305e011e287ad362c762d, 1, f, 2013-03-08 15:13:55, 2013-01-01 00:00:00, И20-0006576, f, \xb9ba2928913eb98745

Не совсем ясно откуда может взяться значение NULL - ведь в подзапросе его нет и обновляться должны только те данные, которые возвращает SELECT.
...
Рейтинг: 0 / 0
UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
    #39585031
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pmb17Добрый день.
Есть таблица, в которой нужно обновить по некому условию (WHERE d._fld16100rref <> E'\\x88b1001e672dd19011e53b498262f721'::bytea) три поля, причем одно поле вычисляется на основе данных других таблиц
У меня получился вот такой UPDATE:
Код: sql
1.
2.
3.
4.
5.
6.
7.
UPDATE _document585 AS ud 
SET (_fld16089, _fld16100rref, _fld16086rref) = 
(COALESCE(dd.comment, ud._fld16089), COALESCE(dd.ref_org, ud._fld16100rref), COALESCE(dd.ref_kkm, ud._fld16086rref)) 
FROM 
(SELECT d._idrref as _idrref, r1._fld2318::mvarchar || ' ' || r2._fld26273::mvarchar AS comment, E'\\x00000000000000000000000000000000'::bytea AS ref_org,  E'\\x00000000000000000000000000000000'::bytea AS ref_kkm  
FROM _document585 as d left join _reference137 as r1 on d._fld16100rref = r1._idrref left join _reference92 as r2 on d._fld16086rref = r2._idrref WHERE d._fld16100rref <> E'\\x88b1001e672dd19011e53b498262f721'::bytea) AS dd
WHERE dd._idrref = ud._idrref;



который выполняет то что нужно, но если убрать COALESCE в операторе SET

SET (_fld16089, _fld16100rref, _fld16086rref) = (dd.comment, dd.ref_org, dd.ref_kkm)
то получаю ошибку:
ОШИБКА: нулевое значение в столбце "_fld16089" нарушает ограничение NOT NULL
ПОДРОБНОСТИ: Ошибочная строка содержит (\xb902001a64a305e011e287ad362c762d, 1, f, 2013-03-08 15:13:55, 2013-01-01 00:00:00, И20-0006576, f, \xb9ba2928913eb98745

Не совсем ясно откуда может взяться значение NULL - ведь в подзапросе его нет и обновляться должны только те данные, которые возвращает SELECT.

А почему вы считаете что в результатах запроса
ELECT d._idrref as _idrref, r1._fld2318::mvarchar || ' ' || r2._fld26273::mvarchar AS comment, E'\\x00000000000000000000000000000000'::bytea AS ref_org, E'\\x00000000000000000000000000000000'::bytea AS ref_kkm
FROM _document585 as d left join _reference137 as r1 on d._fld16100rref = r1._idrref left join _reference92 as r2 on d._fld16086rref = r2._idrref WHERE d._fld16100rref <> E'\\x88b1001e672dd19011e53b498262f721'::bytea

значение r1._fld2318::mvarchar || ' ' || r2._fld26273::mvarchar AS comment - не может быть NULL?

Выполните запрос и проверьте глазами например?

--
Проект с базой но без DBA все равно что автопарк без автомеханика. Все ездит до первой поломки.
dataegret.ru
...
Рейтинг: 0 / 0
UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
    #39585109
pmb17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk, спасибо, действительно проблема была в том что некоторые записи имеют значение NULL
...
Рейтинг: 0 / 0
UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
    #39585112
pmb17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя поля _fld2318 и _fld26273 имеют модификатор NOT NULL
...
Рейтинг: 0 / 0
UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
    #39585142
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pmb17Хотя поля _fld2318 и _fld26273 имеют модификатор NOT NULL

Так left join же, нет связанной записи - и получили Null.
...
Рейтинг: 0 / 0
UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
    #39585196
pmb17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk, спасибо)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / UPDATE FROM SELECT ОШИБКА: нулевое значение в столбце
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]