根据 IF EXIST 插入数据

INSERT data based on IF EXIST

我正在为我的一个客户构建系统更新功能,该客户拖放一个 xls sheet(导出 SAP 表格)并且该查询基本上 TRUNCATES 现有 "project data" 在 import_table 中并从 xls 中插入所有项目数据,现在工作正常,但我需要帮助的是编写一个存储过程,从 import_table 中选择 project_number 和检查 project_number 是否已存在于 project_table 中,如果不存在,则通过 project_number.

import_table 插入新项目数据

到目前为止我有:

CREATE PROCEDURE `update_projects` ()
CREATE DEFINER=`root`@`%` PROCEDURE `update_projects`()
BEGIN
    INSERT INTO `permit`.`project2`(project,description,mat,city,stat,own,est_start,est_end,constr_start,constr_end,constr_cnf,plan_order,div_code,div_long,constr_total_plan,constr_total_act)
    SELECT OrderNo,OrderDescription,mat,MainWorkCtr,OrdUsrStatus,JobOwner,ESTStartDate,ESTEndDate,ConstrStartDate,ConstrEndDate,ConstrCNFDate,PlanningOrder,division,division_long,cons_total_plan_hrs,cons_total_act_hrs
    FROM `permit`.`wrm100_raw` i
    WHERE NOT EXISTS (SELECT 1 FROM `permit`.`project2` pt WHERE i.OrderNo = pt.project)
END;

如果我理解正确,那么你可以使用 WHERE 子句进行检查:

CREATE DEFINER=`root`@`%` PROCEDURE `update_projects`()
BEGIN
    INSERT INTO `db`.`project_table` (project_table columns...) 
        SELECT import_table columns...
        FROM db.import_table i
        WHERE NOT EXISTS (SELECT 1
                          FROM db.project_table pt
                          WHERE i.project_number = pt.project_number
                         )
END;

如果问题重复 project_number,那么您应该定义一个唯一的 constraint/index 并让数据库验证数据。