sql连表可能会导致数据重复
SELECT
SUM(c.patient_cost) allCost
FROM patient_cost c
LEFT JOIN patient_operation o ON c.patient_id = o.patient_id
WHERE
o.operation_type = '三级手术'
例:
patient_cost是病人费用表
patient_operation是病人手术表
上面的sql意思是想获取做过三级手术的所有病人的费用之和,patient_cost中保存的是病人的费用,一个病人只有一条记录。但是因为一个病人可能做过多次手术,意味着patient_operation中会有多条记录。经过连表之后就会导致费用记录变多,所以上面的sql执行后会导致费用增多
使用Distinct子查询去除重复记录后再处理
对前面的sql进行改进
SELECT
SUM(t.patient_cost) allCost
FROM
(
SELECT
distinct
c.patient_id,
c.patient_cost
FROM patient_cost c
LEFT JOIN patient_operation o ON c.patient_id = o.patient_id
WHERE
o.operation_type = '三级手术'
) t
可以看到,对t子表我们对查询出来的结果只取了想要的病人id和病人费用来去重,其实就是将病人id和费用当成了唯一主键,所以经过去重之后的t子表就保证了一个病人一条费用记录,最后再对t表中的结果进行计算求和得出最终费用。
那所有的连表都会造成记录重复吗?
答案:并不是
如果连表满足一对一的条件,那么就不会发生这种情况
发表回复