我正在将CRM迁移到另一个CRM系统,我试图在一个表中运行5,000个插入语句,该表创建了两个实体之间的关系(公司>员工) 然而,在旧的CRM中,一些公司/员工不再存在,但这种关系仍然存在。
因此,当我尝试导入与其中一个实体缺失的关系时,我收到错误。
我想运行所有5,000个insert语句并保留WHICH语句生成错误的日志。
有没有办法做到这一点?我使用的是MySQL Workbench,但如果更容易,我也可以在命令行中完成。
INSERT INTO `fb_civicrm`.`civicrm_relationship` (`contact_id_a`, `contact_id_b`, `relationship_type_id`, `is_active`, `description`, `is_permission_a_b`, `is_permission_b_a`) VALUES ((SELECT entity_id FROM fb_civicrm.civicrm_value_sugar_info_1 WHERE sugarcrmid_1 = 'e03a03ae-13d1-4bdb-799f-4fe7f3801f65' AND entity_id > 13451), (SELECT entity_id FROM fb_civicrm.civicrm_value_sugar_info_1 WHERE sugarcrmid_1 = '8ca77aa9-8bfc-2516-85ca-4fe7f2fa48bb' AND entity_id < 13452 ), '5', '1', '', '0', '0');
所以答:我需要一些方法来继续运行我的语句,即使我得到子查询错误(例如:contact_id_a不能为空)
和B:我需要一种方法来过滤MySQL工作台中的输出,只显示错误。
((与问题无关,但如果您想知道:第一个ID是员工旧系统的ID,第二个ID是旧系统中公司的ID。我使用&lt; 13451因为旧系统在员工和公司之间有重复的ID(所以一个公司可能是ID 1,一个用户也可能是ID 1 ......在同一个表中......)并且在我导入到新系统的所有公司根据身份证号码13451,所有员工都已经过了))
答案 0 :(得分:0)
这可能不是最好的解决方案,所以我鼓励其他人发帖,如果他们有任何想法,但我用过:
IFNULL运行我的子查询,它允许你检查某个值是否为null(在这种情况下是我的子查询的结果),如果是,则用其他东西替换该值。对我来说,这是一个虚拟用户,它连接到所有破碎的关系。我的查询样本:
INSERT INTO `fb_civicrm`.`civicrm_relationship` (`contact_id_a`, `contact_id_b`, `relationship_type_id`, `is_active`, `description`, `is_permission_a_b`, `is_permission_b_a`) VALUES ((SELECT IFNULL((SELECT entity_id FROM fb_civicrm.civicrm_value_sugar_info_1 WHERE sugarcrmid_1 = 'a9a7ef90-f5c8-1f1d-b4c0-596c16ac363e' AND entity_id > 13451),'20459')), (SELECT IFNULL((SELECT entity_id FROM fb_civicrm.civicrm_value_sugar_info_1 WHERE sugarcrmid_1 = '974' AND entity_id < 13452 ),'20459')), '5', '1', '', '0', '0');