Задача такая:
Есть таблица, в которой в виде
object_id,
property_id,
value хранятся значения свойств.
Хочу при вставке нового значения и обновлении существующего, автоматически заполнять другую таблицу -
object_id,
property_1,
property_2 и т.д.
Пробовал делать вот так:
DECLARE code VARCHAR(50);
# Здесь определяем code
PREPARE update_statement FROM 'UPDATE aggregated SET ? = ? WHERE id = ?';
SET @column = code;
SET @value = NEW.value;
SET @id = NEW.id;
EXECUTE update_statement USING @column, @value @id;
DEALLOCATE PREPARE update_statement;
Но использование динамических выражений в триггерах запрещено.
Есть вариант получать все значения всех свойств для объекта и через ад из условий выполнять один из запросов. Что-то вроде такого (это упрощенный псевдокод):
SELECT value INTO name_value FROM objects WHERE id = NEW.id AND property_code = 'name';
SELECT value INTO some_field_value FROM objects WHERE id = NEW.id AND property_code = 'some_field';
SELECT value INTO some_other_field_value FROM objects WHERE id = NEW.id AND property_code = 'some_other_field';
switch code
case name
name_value = NEW.value
case some_field
some_field_value = NEW.value
case some_other_field
some_other_field_value = NEW.value
UPDATE aggregated (name, some_field, some_other_field) VALUES (name_value, some_field_value, some_other_field_value)
Можно ли изящнее решить данную задачу?