MariaDB копировать строки внутри таблицы - PullRequest
0 голосов
/ 24 декабря 2018

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

enter image description here

Она называется anni_tot и у нее есть одно поле с именем anni,Теперь есть еще одна таблица, которая выглядит следующим образом:

enter image description here

Она называется people_emp.


Теперь я хочу вставить новое поле в таблицу anni_tot, и теперь моя таблица выглядит следующим образом:

enter image description here

Задача, которую мне нужно выполнить: вставить в таблицу people_emp копию всех тех данных, которые содержат предыдущий год (предшествующий 2020 году, то есть 2019 год), и обновить поле anni.Результат должен быть таким:

enter image description here

В красном есть то, что я должен получить.Обычно, когда новый год добавляется в таблицу anni, мне нужно сделать копию всех данных внутри people_emp, которые имеют год = год - 1, и обновить это поле до текущего года.

Я могу сделать это через php, но это довольно сложно поддерживать.Я пытаюсь сделать это с помощью триггера, но я застрял.


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

DELIMITER //
CREATE TRIGGER nuovo_anno
AFTER INSERT ON anni
FOR EACH ROW
BEGIN

 INSERT INTO `people_emp` (`codice`, `nome`, `anno`, `comune`) VALUES ('0', '0', '0', '0');

END; //

DELIMITER ;

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Я считаю, что что-то подобное поможет вам

DELIMITER //
CREATE TRIGGER nuovo_anno
AFTER INSERT ON anni
FOR EACH ROW
BEGIN

 INSERT INTO `people_emp` (`codice`, `nome`, `anno`, `comune`) 
    SELECT `codice`, `nome`, new.anni, `comune`
    FROM `people_emp` where anno = new.anni -1; 

END; //

DELIMITER ;
0 голосов
/ 24 декабря 2018

Я думаю, вы хотите:

INSERT INTO people_emp (codice, nome, anno, comune) 
    SELECT pe.codice, pe.nome, 2020, pe.comune
    FROM people_emp pe
    WHERE pe.anno = 2019;

Эта логика может быть включена в ваш триггер при добавлении новой строки в первую таблицу.

...