хранимая процедура для обновления значений автоматического приращения для каждой дублирующейся записи в MySQL - PullRequest
1 голос
/ 26 июня 2019

Я использую базу данных Mysql для создания новой таблицы.

Что я пытаюсь сделать, это постепенно увеличивать число для каждого дубликата появление значения в другом столбце. Например, для таблицы:

при условии, что столбец order_placed обеих таблиц должен быть нулевым

# req 


+--------------------------------------------------+
|                        req                       |
+--------------------------------------------------+
| req_id | order_placed | contact_id | seq_records |
+--------+--------------+------------+-------------+
| 1      |         null |       1000 |        null |
+--------+--------------+------------+-------------+
| 2      |         null |       1002 |        null |
+--------+--------------+------------+-------------+
| 3      |         null |       1003 |        null |
+--------+--------------+------------+-------------+



+--------------------------------------------------------------------+
|                               contact                              |
+--------------------------------------------------------------------+
| contact_id | first_name | order_placed | company_name | company_id |
+------------+------------+--------------+--------------+------------+
| 1000       | dirt       |         null |         Asus | 12         |
+------------+------------+--------------+--------------+------------+
| 1002       | dammy      |         null |         Asus | 12         |
+------------+------------+--------------+--------------+------------+
| 1003       | samii      |         null |         Asus | 12         |
+------------+------------+--------------+--------------+------------+
| 1004       | xenon      |         null |       Lenova | 1          |
+------------+------------+--------------+--------------+------------+


CREATE TABLE `req` (
  `req_id` bigint(20) NOT NULL,
   `order_placed` char(1) COLLATE utf8_bin DEFAULT NULL,
   `contact_id` bigint(20) DEFAULT NULL,
   `seq_records` bigint(2) DEFAULT NULL,
  PRIMARY KEY (`req_id`),
  KEY `contact_id` (`contact_id`),
  CONSTRAINT `req_ibfk_10` FOREIGN KEY (`contact_id`) REFERENCES 
  `contact` (`contact_id`)
) 
/*!40101 SET character_set_client = @saved_cs_client */;

# contact

CREATE TABLE contact (
  contact_id bigint(20) NOT NULL,
  `first_name` varchar(100) COLLATE utf8_bin NOT NULL,
  `company_name` varchar(100) COLLATE utf8_bin DEFAULT NULL,
  `company_id` varchar(100) COLLATE utf8_bin DEFAULT NULL,
  `order_placed` char(1) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`contact_id`),
  KEY `index_name` (`contact_id`),
) 

процедура хранения дубликатов названий компаний и их количества.

DELIMITER $$
DROP procedure IF EXISTS `recordsequence` $$
CREATE procedure `recordsequence` () 
BEGIN

declare companyname varchar(250);
declare recordcount integer default 0;
DECLARE vfinished INTEGER DEFAULT 0;
declare duplcount integer default 0;
declare icount int default 0;
DEClARE records_cursor CURSOR FOR 
            select c.company_name,count(c.company_name) from contact c, req r where c.contact_id=r.contact_id and r.order_placed is null and r.status  group by c.company_name; 
  -- declare NOT FOUND handler
 DECLARE CONTINUE HANDLER 
        FOR NOT FOUND SET vfinished = 1;
    OPEN records_cursor;
    transfer_records: LOOP
    FETCH records_cursor INTO companyname,duplcount;## 

 - Heading

 ##
    IF vfinished = 1 THEN 
        LEAVE transfer_records;
    END IF;
 End$$
DELIMITER ;

ожидаемый результат

Eg: req table                                          contact table

|req_id|order_placed| contact_id|seq_records| $ |company_name|order_placed| 
   1022      null          1000           1            Asus         null
   1025      null          1002           2            Asus         null
   1027      null          1003           3            Asus         null
   1028      null          1005           1            Vega         null
   1029      null          1006           2            Vega         null

как и в предыдущем примере, я обновил столбец seq_records со значениями в соответствии со столбцом company_name, при условии, что оба столбца order_placed равны нулю.

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