Изменить значение одного столбца на основе изменения в другом столбце

Предположим, у меня есть такая таблица SQL:

+----+------+-------+
| id | ColA | ColB  |
+----+------+-------+
|  1 | red  | false |
+----+------+-------+

Я бы хотел, чтобы значение colA изменилось на 'blue', когда я установил значение colB на 'true', чтобы я получил:

+----+------+------+
| id | ColA | ColB |
+----+------+------+
|  1 | blue | true |
+----+------+------+

Я понимаю, что могу просто обновить оба столбца, но мне было интересно, можно ли добавить в БД правило, которое делает это автоматически.

Я использую psql 10.4.

Если кола всегда - это blue, когда colb - это true, и всегда red, когда colb - это false, тогда зачем вообще хранить cola?

a_horse_with_no_name 02.10.2018 10:48

Используйте Курок

Hary 02.10.2018 10:49

В моей БД есть три возможности для (colA, colB): (красный, ложный), (синий, истинный), (синий, ложный). Триггер специально предназначен для случаев, когда colB in (красный, ложь) принимает значение true.

guest856 03.10.2018 10:03
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
29
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

select id, case when ColA='red' then 'blue' end as ColA,
case when ColA='red' then true end as ColB from t
Ответ принят как подходящий

Поскольку Postgresql 10 не поддерживает вычисляемые столбцы, я думаю, у вас есть три варианта:

  1. Определите триггер, который обновляет ColA при обновлении ColB.

  2. Определите представление поверх исходной таблицы, которое вычисляет ColA.

  3. Забудьте о ColA в базе данных и вычислите значение в SELECT.

Оказалось, что структура таблицы основана на недоразумении. Его изменили, и вопрос уже не актуален. Спасибо за ответ :)

guest856 03.10.2018 10:05

Другие вопросы по теме