flexcube_data
下表
+---------+--------+--------------+-------------+-----------------+-----------------+------------------+
| item_no | CIF_NO | CIF_NAME | PRIMARY_KEY | Collateral_Type | Collateral_Code | Stamped_to_Cover |
+---------+--------+--------------+-------------+-----------------+-----------------+------------------+
| 1 | 801125 | John Doe | YES | 06 | J1 | 0 |
| 2 | 801125 | John Doe | YES | 08 | J5 | 0 |
| 3 | 801125 | John Doe | YES | 26 | J25 | 0 |
| 4 | 801125 | John Doe | YES | 26 | J25 | 0 |
| 5 | 801125 | John Doe | YES | 89 | J53 | 0 |
| 6 | 801125 | John Doe | YES | 98 | J57 | 0 |
| 7 | 801125 | John Doe | YES | 58 | J88 | 0 |
| 8 | 800102 | John Doe | | 19 | J03 | 0 |
| 9 | 800102 | Mary Jane | YES | 22 | J1 | 0 |
| 10 | 800102 | Mary Jane | YES | 90 | J5 | 0 |
| 11 | 800102 | Mary Jane | YES | 01 | J25 | 0 |
| 12 | 800102 | Mary Jane | YES | 77 | J25 | 0 |
| 13 | 800102 | Mary Jane | YES | 42 | J53 | 0 |
| 14 | 800102 | Mary Jane | YES | 25 | J57 | 0 |
| 15 | 800102 | Mary Jane | YES | 36 | J88 | 0 |
| 16 | 800102 | Mary Jane | | 32 | J03 | 0 |
| 17 | 563021 | Jack Daniels | YES | 58 | ab22 | 0 |
| 18 | 563021 | Jack Daniels | YES | 51 | ca55 | 0 |
+---------+--------+--------------+-------------+-----------------+-----------------+------------------+
-
删除重复项
到岸价
flexcube_表
-
tmp_表
(临时表)并只插入一个重复值
我对tmp_表的预期结果应该是
+---------+--------+--------------+-------------+-----------------+-----------------+------------------+
| item_no | CIF_NO | CIF_NAME | PRIMARY_KEY | Collateral_Type | Collateral_Code | Stamped_to_Cover |
+---------+--------+--------------+-------------+-----------------+-----------------+------------------+
| 1 | 801125 | John Doe | YES | 06 | J1 | 0 |
| 9 | 800102 | Mary Jane | | 19 | J03 | 0 |
| 17 | 563021 | Jack Daniels | YES | 58 | ab22 | 0 |
+---------+--------+--------------+-------------+-----------------+-----------------+------------------+
我的示例代码如下:
DELIMITER //
DROP PROCEDURE if exists FLEX //
use members_db;
Drop table if exists tmp_table;
CREATE TABLE tmp_table (
item_no INT AUTO_INCREMENT,
CIF_NO VARCHAR(255),
CIF_NAME VARCHAR(255),
Collateral_Type_1 VARCHAR(255),
Collateral_Code_1 VARCHAR(255),
Stamped_to_Cover_1 BIGINT,
Collateral_Type_2 VARCHAR(255),
Collateral_Code_2 VARCHAR(255),
Stamped_to_Cover_2 BIGINT,
Collateral_Type_3 VARCHAR(255),
Collateral_Code_3 VARCHAR(255),
Stamped_to_Cover_3 BIGINT,
Collateral_Type_4 VARCHAR(255),
Collateral_Code_4 VARCHAR(255),
Stamped_to_Cover_4 BIGINT,
Collateral_Type_5 VARCHAR(255),
Collateral_Code_5 VARCHAR(255),
Stamped_to_Cover_5 BIGINT,
PRIMARY KEY (item_no)
);
Drop table if exists flexcube_table;
CREATE TABLE flexcube_table (
item_no INT AUTO_INCREMENT,
CIF_NO VARCHAR(255),
CIF_NAME VARCHAR(255),
PRIMARY_KEY VARCHAR(255),
Collateral_Type VARCHAR(255),
Collateral_Code VARCHAR(255),
Stamped_to_Cover BIGINT,
PRIMARY KEY (item_no)
);
/* I INSERTED A COUPLE OF VALUES IN THE FLEXCUBE TABLE AS A SAMPLE */
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("801125","YES","John Doe","06","J1","$20,000");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("801125","YES","John Doe","08","J5","$22,000");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("801125","YES","John Doe","26","J25","$5,100");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("801125","YES","John Doe","26","J25","$5,100");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("801125","YES","John Doe","89","J53","$111,000");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("801125","YES","John Doe","98","J57","$118,000");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("801125","YES","John Doe","58","J88","$103,000");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","","John Doe","19","J03","$114,000");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","YES","Mary Jane","22","J1","$20,125");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","YES","Mary Jane","90","J5","$88,135");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","YES","Mary Jane","01","J25","$3,401");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","YES","Mary Jane","77","J25","$8,301");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","YES","Mary Jane","42","J53","$25,501");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","YES","Mary Jane","25","J57","$82,101");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","YES","Mary Jane","36","J88","$156,222");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("800102","","Mary Jane","32","J03","$187,256");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("563021","YES","Jack Daniels","58","ab22","$10,110");
insert into flexcube_table (CIF_NO,PRIMARY_KEY,CIF_NAME,Collateral_Type,Collateral_Code,Stamped_to_Cover) values("563021","YES","Jack Daniels","51","ca55","$26,725");
CREATE PROCEDURE FLEX()
BEGIN
DECLARE total_flex_rows INT DEFAULT 0;
DECLARE tmp_table_rows INT DEFAULT 0;
DECLARE counter INT DEFAULT 0;
DECLARE tmp_table_counter INT DEFAULT 0;
DECLARE FLEXCUBE_CIF_NO VARCHAR(255);
DECLARE TEMPORARY_CIF_NO VARCHAR(255);
DECLARE MATCH_FOUND INT DEFAULT 0;
DECLARE COLLATERAL_EXIST INT DEFAULT 0;
/* GET TOTAL ROWS IN ORIGINAL TABLE TO LOOP THROUGH AND STORE IT INTO VARIABLE*/
SELECT COUNT(*) FROM flexcube_table INTO total_flex_rows;
SET counter=0;
/* GET TOTAL ROWS IN TMP TABLE AND STORE IT IN VARIABLE */
SET tmp_table_rows=(SELECT COUNT(*) FROM tmp_table);
IF tmp_table_rows=0 THEN
INSERT INTO tmp_table (CIF_NO) VALUES("1");
END IF;
/* LOOP THROUGH EVERY ROW IN ORIGINAL TABLE TO DETERMINE IF CIF_NO VALUE EXIST IN TEMPORARY TABLE */
WHILE counter<=total_flex_rows DO
/* SET MATCH FOUND TO 0 - NO MATCH IS FOUND AS YET */
SET MATCH_FOUND=0;
SET FLEXCUBE_CIF_NO="";
SET FLEXCUBE_CIF_NO=(SELECT CIF_NO FROM flexcube_table WHERE PRIMARY_KEY="YES" LIMIT counter,1);
/* FOR EACH CIF_NO VALUE IN ORIGINAL TABLE, LOOP THROUGH EVERY ROW IN TEMPORARY TABLE TO CHECK IF VALUE ALREADY EXISTS */
SELECT COUNT(*) FROM tmp_table INTO tmp_table_rows;
sub_loop:WHILE tmp_table_counter<=tmp_table_rows DO
/* THE PROBLEM IS TEMPORARY_CIF_NO IS NOT NEW VALUES */
SET TEMPORARY_CIF_NO=(SELECT CIF_NO FROM tmp_table LIMIT tmp_table_counter,1);
IF FLEXCUBE_CIF_NO = TEMPORARY_CIF_NO THEN
/* WE CIF_NO IN ORIGINAL TABLE IS EQUAL TO CIF_NO VALUE IN TEMPORARY TABLE MATCH_FOUND=1 (TRUE) */
SET MATCH_FOUND=1;
SELECT "I FOUND A MATCH!!!!!!!!!!!!";
SET COLLATERAL_EXIST=0;
/* LEAVE WHILE LOOP SINCE THERE IS NO NEED TO CONTINUE FINDING CIFS */
LEAVE sub_loop;
END IF;
/* CONTINUE TEMPORARY TABLE ROW COUNTER INCREMENTING COUNTER */
SET tmp_table_counter=tmp_table_counter+1;
END WHILE sub_loop;
/* IF NOT MATCH IS FOUND THEN ADD NEW CIF_VALUE TO TEMPORARY TABLE */
IF MATCH_FOUND=0 THEN
/*IF NO MATCH IS FOUND INSERT THE NEW CIF_NO VALUE IN THE TEMPORARY TABLE */
INSERT INTO tmp_table (CIF_NO) VALUES((SELECT (CIF_NO) FROM flexcube_table LIMIT counter,1));
END IF;
SET counter = counter + 1;
SET MATCH_FOUND=0;
END WHILE;
End//
DELIMITER //
CALL FLEX();
select * from tmp_table;
发行
当循环遍历临时表中的行时,我将把每一行的CIF-NO值存储在一个名为
TEMPORARY_CIF_NO
.
线路
SELECT TEMPORARY_CIF_NO;
正在返回
NULL
尽管我设定了
临时到岸价
值是临时表中当前行的CIF-NO值。
为什么变量是
临时到岸价
返回
?