【问题描述】
使用了join之后,发现同一条记录被复制了很多次。但是明明没有采用笛卡尔积的join方式啊???
举例:
select a.*
from ht_insurance_temp_3_1 a
join (select distinct
a.id
,a.insurancemonth
,count(*)
from ht_insurance_temp_3_1 a
join ht_insurance_temp_2 b on a.id = b.id and a.city = '南宁'
group by a.id,a.insurance_month
having count(*) != 1) b on a.id = b.id
order by a.id,a.insurance_month desc;
我们的目的是查看重复记录的具体情况(某些id的某些月份的记录是重复的,要查看这种重复情况的id的记录情况),结果返回的结果是每条记录都重复了多次,但是原始记录并不是这样的!!!!!
【原因分析】
虽然没有使用笛卡尔积,但是却出现了类似的效果。原因就在于join的键(key)是id,并且join两侧的表的id都有重复,这便导致,出现了笛卡尔积的结果。(就是说右边的id不知道跟左边的哪个id连比较好,那就每个都连一次吧!我感觉我说不明白~~~~)
【解决办法】
使一一对应。
select a.*
from ht_insurance_temp_3_1 a
join (select distinct
a.id
,a.insurancemonth
,count(*)
from ht_insurance_temp_3_1 a
join ht_insurance_temp_2 b on a.id = b.id and a.city = '南宁'
group by a.id,a.insurance_month
having count(*) != 1) b on a.id = b.id and a.insurance_month = b.insurance_month #在这里修改的哈,加了一个束缚条件哈
order by a.id,a.insurance_month desc;
问题解决!
(仅供个人学习,不负责任~~哈哈哈~~~~)