sql查询不重复记录,db2
数据库是db2.通过多表查询出结果,结果中某一字段含有重复值,现在保留相同中任何一项即可。举例如下:假设通过sql语句:selectcif.name,cif.cifseq...
数据库是db2.
通过多表查询出结果,结果中某一字段含有重复值,现在保留相同中任何一项即可。举例如下:
假设通过sql语句:
select cif.name,cif.cifseq,cif.cifno,account.acno
from cif,account
where cif.cifseq = account.cifseq
查询到的结果集如下:
name cifseq cifno acno
------------------------------------------
q1 1 101 620001
q2 2 101 620002
q3 1 102 620003
q4 2 102 620004
q5 1 102 620005
q6 2 103 620006
怎么样能让结果集只保留q1,q3,q6?(q1,q2保留任何一个都可以,q3,q4,q5保留任何一个都可以) 展开
通过多表查询出结果,结果中某一字段含有重复值,现在保留相同中任何一项即可。举例如下:
假设通过sql语句:
select cif.name,cif.cifseq,cif.cifno,account.acno
from cif,account
where cif.cifseq = account.cifseq
查询到的结果集如下:
name cifseq cifno acno
------------------------------------------
q1 1 101 620001
q2 2 101 620002
q3 1 102 620003
q4 2 102 620004
q5 1 102 620005
q6 2 103 620006
怎么样能让结果集只保留q1,q3,q6?(q1,q2保留任何一个都可以,q3,q4,q5保留任何一个都可以) 展开
4个回答
展开全部
select a.* from
(select cif.name,cif.cifseq,cif.cifno,account.acno
from cif,account
where cif.cifseq = account.cifseq
) a inner join
(select min(name) as name,cifno from
(select cif.name,cif.cifseq,cif.cifno,account.acno
from cif,account
where cif.cifseq = account.cifseq
) t
group by cifno) b
on a.name=b.name and a.cifno=c.cifno
--其实你直接查询cif表就可以了
追问
我写的那条sql语句只是举个列子,实际语句很复杂,cif不能满足需求
追答
说下思路:你找出重复的一列[A]或多列[A],[B],[C],
然后group by [A],[B],[C] 同时找出最小的ID(MinId),生成一个临时表
然后临时表和原来的表连接inner join,
条件a.A=temp.A and a.B=temp.B and a.C=temp.C and a.ID=temp.MinId 即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看你上面语句和结果,觉得你的关联条件可能选择的不够优化,多表关联最好选择主外键,不然本来两个表没有重复数据,但是你关联之后可能就会有很多重复数据,或者你再多加点条件,然后通过row_number() over() ...排序取数,或group by 取最大记录或最小记录。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用group by cifno
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询