Условное обновление и выбор операторов в postgreSQL - PullRequest
0 голосов
/ 26 сентября 2018

Я создаю таблицу расписаний в postgresql.Я хочу, чтобы пользователь мог обновлять любые столбцы подряд.Если пользователь изменяет только одно значение, я хочу, чтобы это значение было обновлено, а все остальные значения остались такими же, как в базе данных.Я попытался сделать прямой оператор обновления, и любые неопределенные входные данные изменили бы значение столбца на ноль.

Вот мое решение далеко

create table schedule (
    id serial primary key,
    instructor_id integer references users(id),
    holidays boolean, 
    sunday_morning text,
    sunday_afternoon text,
    monday_morning text,
    monday_afternoon text,
    tuesday_morning text,
    tuesday_afternoon text,
    wednesday_morning text,
    wednesday_afternoon text,
    thursday_morning text,
    thursday_afternoon text,
    friday_morning text,
    friday_afternoon text,
    saturday_morning text,
    saturday_afternoon text
);

ВСТАВКА ЗАЯВЛЕНИЯ

insert into schedule (
    instructor_id,
    holidays, 
    sunday_morning,
    sunday_afternoon,
    monday_morning,
    monday_afternoon,
    tuesday_morning,
    tuesday_afternoon,
    wednesday_morning,
    wednesday_afternoon,
    thursday_morning,
    thursday_afternoon,
    friday_morning,
    friday_afternoon,
    saturday_morning,
    saturday_afternoon
) values (2, false, null, '7 - 9', null, null, '4 - 7', null, null, null, '9 - 11', null, null, null, null, null )

ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ

update schedule 
set 
    holidays = case when true <> NULL then true else holidays end ,
    sunday_morning = case when 'asd' <> NULL then 'asd' else sunday_morning end,
    sunday_afternoon = case when 'asd' <> NULL then 'asd' else sunday_afternoon end,
    monday_morning = case when 'asd' <> NULL then 'asd' else monday_morning end,
    monday_afternoon = case when 'asd' <> NULL then 'asd' else monday_afternoon end,
    tuesday_morning = case WHEN 'asd' <> NULL then 'asd' else tuesday_morning end,
    tuesday_afternoon = case when 'asd' <> NULL then 'asd' else tuesday_afternoon end,
    wednesday_morning = case WHEN 'asd' <> NULL then 'asd' else wednesday_morning end,
    wednesday_afternoon = case when 'asd' <> NULL then 'asd' else wednesday_afternoon end,
    thursday_morning = case when 'asd' <> NULL then  'asd' else thursday_morning end,
    thursday_afternoon = case when  'asd' <> NULL then 'asd' else thursday_afternoon end,
    friday_morning = case when  'asd' <> NULL then  'asd' else friday_morning end,
    friday_afternoon = case when  'asd' <> NULL then  'asd' else friday_afternoon end,
    saturday_morning = case when  'asd' <> NULL then  'asd' else saturday_morning end,
    saturday_afternoon = case when  'asd' <> NULL then  'asd' else saturday_afternoon end
where instructor_id = 1
select * from schedule

asd - просто фиктивные данные.Я не могу понять, почему это ломается.Я попробовал его в меньшем масштабе, и он работал отлично, однако теперь он выдает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...