【问题标题】:INSERT data based on IF EXIST根据 IF EXIST 插入数据
【发布时间】:2015-12-04 20:19:51
【问题描述】:

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

到目前为止我所拥有的:

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;

【问题讨论】:

    标签: mysql sql database stored-procedures insert


    【解决方案1】:

    如果我理解正确,那么您可以使用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_numbers,那么您应该定义一个唯一的约束/索引并让数据库验证数据。

    【讨论】:

    • 很抱歉这些列的插入延迟了。我运行了它,它在最后一行给了我一个错误。我更新了主线程以显示实际值。
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2014-02-10
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多