SQL连表导致数据重复问题

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表中的结果进行计算求和得出最终费用。

那所有的连表都会造成记录重复吗?

答案:并不是

如果连表满足一对一的条件,那么就不会发生这种情况


已发布

分类

,

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注