这里介绍的内容不是copy一张表的内容另外一张表。而是插入表中的数据是 融合了函数在select中。
例如:
INSERT INTO `inp_bill_detail` (`id`, `patient_id`, `visit_id`, `item_class`, `item_name`, `item_spec`, `item_code`, `amount`, `units`, `item_price`, `costs`, `charges`, `price_quotiety`, `order_dept`, `order_doctor`, `perform_dept`, `perform_person`, `class_on_reckoning`, `subj_code`, `class_on_mr`, `rcpt_no`, `dept_stayed`, `ward_code`, `orders_id`, `org_id`, `del_flag`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `storage_id`, `price_id`, `source_type`) SELECT UUID(), `patient_id`, `visit_id`, `item_class`, `item_name`, `item_spec`, `item_code`, clinic_times*amount*IF((repeat_incaditor = '0'),1,IF((get_bill_type(freq_interval_unit)='0'),get_times_hour(freq_interval,last_accting_date,get_start_time(last_accting_date,start_date),pre_discharge_date),IF((get_bill_type(freq_interval_unit)='1'),get_times_day(freq_interval,freq_counter,last_accting_date,get_start_time(last_accting_date,start_date)),get_times_weeek(nurse_perform_time)))) , `units`, `price`, price*amount*IF((repeat_incaditor = '0'),1,IF((get_bill_type(freq_interval_unit)='0'),get_times_hour(freq_interval,last_accting_date,get_start_time(last_accting_date,start_date),pre_discharge_date),IF((get_bill_type(freq_interval_unit)='1'),get_times_day(freq_interval,freq_counter,last_accting_date,get_start_time(last_accting_date,start_date)),get_times_weeek(nurse_perform_time)))) , price*amount*IF((repeat_incaditor = '0'),1,IF((get_bill_type(freq_interval_unit)='0'),get_times_hour(freq_interval,last_accting_date,get_start_time(last_accting_date,start_date),pre_discharge_date),IF((get_bill_type(freq_interval_unit)='1'),get_times_day(freq_interval,freq_counter,last_accting_date,get_start_time(last_accting_date,start_date)),get_times_weeek(nurse_perform_time)))) , 1, `new_dept`, create_by, `performed_by`, '', #`perform_person`, `class_on_reckoning`, subj_code, `class_on_mr`, '', `ward_code`, `ward_code`, orders_id,#`orders_id`, `org_id`, 0, temp, NOW(), 0000, NOW(), '自动计费', '', `price_id`, '5' FROM v_bill_items ;
这个语句: 那么在什么情况下才会执行成功呢,假设select 的内容都正常执行,只有在查询出来的数据全部满足inp_bill_detail 的约束要求之后,才会执行成功,否则,有一条数据不满足,全部都执行失败。这里就严重与我们初始设想的不一致。所以最好的办法是针对每一条数据单独进行处理,而不是批量处理。
额外说一点:就是mysql 与Null值比较大小 不能用 =null 而是 is null