mysql вставляет триггер, только если не дублируется - PullRequest
0 голосов
/ 02 октября 2018

Я немного запутался с использованием события триггера для получения ожидаемого результата

Здесь главная таблица - fee.Структура выглядит следующим образом:

Плата

id  |   rn  |   fid |   amount  |   f_month |   year
====================================================
1   |   1   |   1   |   150000  |   1       |   1
2   |   1   |   2   |   50000   |   1       |   1
3   |   2   |   1   |   550500  |   2       |   1
4   |   2   |   2   |   200     |   2       |   1
5   |   3   |   1   |   550500  |   2       |   1

И был использован простой триггер вставки.

DROP TRIGGER IF EXISTS `insertinv`;
CREATE DEFINER=`root`@`localhost` TRIGGER `insertinv`
AFTER INSERT ON `fee` FOR EACH ROW INSERT INTO invoice VALUES(null, NEW.rn, NEW.year, '') 

Вывод, что я получаю

Счет

inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   1   |   1   |   0
3   |   2   |   1   |   0
4   |   2   |   1   |   0
5   |   3   |   1   |   0

Но я хочу применить условие

, еслиfee.rn И fee.f_month И fee.year то же самое, что прекратить вставку .Я имею в виду игнорировать fee.fid.

и добейтесь следующего результата.Ожидаемый

Счет

inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   2   |   1   |   0
3   |   3   |   1   |   0

В таблице триггеров inv - первичный ключ и автоинкремент

1 Ответ

0 голосов
/ 02 октября 2018
  • Проверьте, существует ли inv для соответствующих year и rn.
  • Если его не существует, используйте оператор insert.

Выполните следующие действия:

DELIMITER $$
DROP TRIGGER IF EXISTS `insertinv` $$

CREATE DEFINER=`root`@`localhost` TRIGGER `insertinv`
AFTER INSERT ON `fee` 
FOR EACH ROW 
  BEGIN

    /* Declare a variable to store invoice id for matching year and rn */
    DECLARE inv_exists INT(11) DEFAULT 0;

    /* Fetch the invoice id if exists */
    SELECT inv INTO inv_exists 
    FROM invoice 
    WHERE rn = NEW.rn AND 
          y_d = NEW.year; 

    /* if no invoice exists then insert into the table */
    IF NOT(inv_exists > 0) THEN 

        /* Insert statement */
        INSERT INTO invoice VALUES(null, NEW.rn, NEW.year, '') ;

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