Я использую базу данных 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
равны нулю.