Обновление SQL из нескольких таблиц - PullRequest
1 голос
/ 13 сентября 2011

У меня, казалось бы, базовое обновление SQL для выполнения в таблице postgreSQL, которая принимает значения из другой таблицы, структуры таблиц следующие:

сеансы_таблицы

session_id (PK)скоростьвремя

lengths_table

length_idидентификатор сессииlength_dist

Я хочу обновить поле velocity суммой значений length_dist, где session_table.session_id = lengths_table.session_id

Я пытаюсь выполнить следующее утверждение, но при запуске получаю ERROR: null value in column "velocity" violates not-null constraint(работает нормально, когда я указываю одну строку)

UPDATE sessions_table 
SET velocity = ROUND((SELECT SUM(lengths_table.length_dist) 
                      FROM lengths_table
                      WHERE lengths_table.session_id = sessions_table.session_id)/time,2)

Может кто-нибудь подсказать, где я ошибаюсь?

Спасибо

Дэвид

1 Ответ

1 голос
/ 13 сентября 2011

Или:

Ваш синтаксис неправильный (lengths_table отсутствует). Должно быть:

UPDATE sessions_table 
SET velocity = ROUND((SELECT SUM(lengths.length_dist) 
                      FROM lengths_table 
                      WHERE lengths.session_id = sessions_table.session_id)/time,2)

или в некоторых случаях запись сессионной таблицы не имеет записи в файле lengths_table. Поэтому вам нужно установить velocity в ноль в этом случае, чтобы удовлетворить ваше ненулевое ограничение:

UPDATE sessions_table 
SET velocity = coalesce(ROUND((SELECT SUM(lengths_table.length_dist) 
                               FROM lengths 
                               WHERE lengths_table.session_id = sessions_table.session_id)/time,2),0)

, или есть некоторые подходящие записи в lengths_table с нулевыми значениями в length_dist, поэтому вам нужно заменить их на ноль, чтобы сумма работала:

UPDATE sessions_table 
SET velocity = ROUND((SELECT SUM(coalesce(lengths_table.length_dist,0)) 
                      FROM lengths_table 
                      WHERE lengths_table.session_id = sessions_table.session_id)/time,2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...