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保留任何一个都可以)
展开
 我来答
乄阿德
2014-03-05 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:130万
展开全部
对结果集的查询SQL如下:假设表明为 table
第一步 取出q1,q3,q6的acno:select Min(acno),cifno from table group by cifno
第二步 嵌套获取结果集: 
select * from table where acno in 
(select Min(acno) from table group by cifno)
如果上述结果集是SQL得来的,做下替换就可以了。
斯内科Snake
2014-03-05 · TA获得超过523个赞
知道小有建树答主
回答量:707
采纳率:50%
帮助的人:235万
展开全部
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 即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TUBER727
2014-03-06 · TA获得超过428个赞
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:109万
展开全部
看你上面语句和结果,觉得你的关联条件可能选择的不够优化,多表关联最好选择主外键,不然本来两个表没有重复数据,但是你关联之后可能就会有很多重复数据,或者你再多加点条件,然后通过row_number() over() ...排序取数,或group by 取最大记录或最小记录。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
数字智囊
2014-03-05
知道答主
回答量:10
采纳率:0%
帮助的人:1.3万
展开全部
使用group by cifno
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式