mysql查询两个字段值相同的记录
mysql查询两个字段值相同的记录
已知,客户在投保之前和投保之后在applicant表记录了对应的两条数据,表结构如上所示。
id是投保单id,投保前后的两条数据一定一致,applicant_id是投保人id,有可能存在不一致的情况,投保前后对应oldnew字段存储的状态分别为1和2。
现要将数据区分:
1.统计数据前后applicant_id字段未发生改变的数据,将对应数据展示
2.统计数据前后applicant_id字段发生了改变的数据,并对数据进行拼接
1.分析可知其实就是要得到applicant_id和id两个字段相同的数据
sql语句:
select id,applicant_id,applicant_name,oldnew
from applicant a
group by id,applicant_id
having count(*)=2
其中group by id,applicant_id 意味着 id和applicant_id都要一致才能分为一组会得到以下结果
having条件针对的是已经分组之后的一个个组合对象,比如上图其实就是分为五组,其中id=2的那组中有两条数据,count(*)针对的是组合对象,id=2对应的值为count(*)=2,得到以下结果
2.统计数据前后applicant_id字段发生了改变的数据,并对数据进行拼接
sql语句:
select a.id 投保前id,a.applicant_id 投保前applicantid,b.id 投保后id,b.applicant_id 投保后applicantid
from applicant a ,applicant b
where a.id=b.id and a.oldnew=1 and b.oldnew=2
group by a.id,a.applicant_id
having count(*)=1
and a.id in
(select c.id
from applicant c
group by c.id
having count(*)=2)
其中
from applicant a ,applicant b 是为了一个表当两个表来查询,可以将两条数据拼接展示
a.oldnew=1 and b.oldnew=2 条件约束使得查询出来的语句只有一条
group by a.id,a.applicant_id
having count(*)=1 是为了校验applicant_id是否不一致,就会分成两组
select c.id from applicant c
group by c.id having count(*)=2 是为了保证一定要是id相同的数据
group by分组一般只展示分组的字段,mysql8.0可以展示其他字段
更多推荐
所有评论(0)