SQL语句多表关联去除重复的记录

hiu1989 2013-08-22 11:10:53
我的数据库是ACCESS,现在我有多张表,现在我用keyjobno关联了,keyjobno是我的关联字段,但当中有重复的记录,怎样去除重复的记录?请教高手,我花了很多时间都没解决到,急啊·············下面附上图1、图2,图1:
图1的结果集是我想要的结果
图2:
图2是我用语句查询出来结果,但不符合我想要的结果。这是我的语句
select a.keyjobno,a.name,getdate,b.indate,b.createdate,c.escdate,d.activityname,joindate from
((welfare a left join in_union_his b on a.keyjobno=b.keyjobno) left join esc_union_his c on
a.keyjobno=c.keyjobno) left join activityrecord d on a.keyjobno=d.keyjobno

要求:要用ACCESS数据库做,每张表如果有相同的记录只显示1条

...全文
14868 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiu1989 2013-09-02
  • 打赏
  • 举报
回复
看来没高手能解决这个问题
hiu1989 2013-08-23
  • 打赏
  • 举报
回复
大神们都哪里去了?大神们赶快来围观啊
Andy__Huang 2013-08-22
  • 打赏
  • 举报
回复
表之间关联的关联没有建好。 每个表都有主键,他们之间仅以keyjobno关联吗?一次性查询,虽然都有keyjobno,但存在冗余是不可避免的
hiu1989 2013-08-22
  • 打赏
  • 举报
回复
各位大侠,请看清我的 。要求:要用ACCESS数据库做,每张表如果有相同的记录只显示1条
Andy__Huang 2013-08-22
  • 打赏
  • 举报
回复
用distinct
select distinct a.keyjobno,a.name,getdate,b.indate,b.createdate,c.escdate,d.activityname,joindate 
from welfare a
left join in_union_his b on a.keyjobno=b.keyjobno
left join esc_union_his c on a.keyjobno=c.keyjobno
left join activityrecord d on a.keyjobno=d.keyjobno
KeepSayingNo 2013-08-22
  • 打赏
  • 举报
回复
select * from welfare a
inner join in_union_his b
on a.key_jobno =b.key_jobno
left join esc_union_his c
on b.id=c.id
left join activityrecord d
on c.id=d.id
ehonor 2013-08-22
  • 打赏
  • 举报
回复
学习中...
苦逼的程序员 2013-08-22
  • 打赏
  • 举报
回复
帮订。大神已出动。
hiu1989 2013-08-22
  • 打赏
  • 举报
回复
各位大虾们,你们写的语句一定要在ACCESS数据库通过才行 welfare是主表,其它3张表是子表,子表的记录可以随意添加,welfare表每个keyjobno只能有一条记录,即welfare表的keyjobno是主键,welfare只返回一行记录就行了,其它表关联后不显示重复记录,重复的为空或null;
hiu1989 2013-08-22
  • 打赏
  • 举报
回复
@wwwwgou,@xxfvba,用ID来关联不好,我主表是welfare,其它是子表,wwwwgou这种方法关联的话,假如我esc_union_his表的记录为10条超过了in_union_his表,这样,esc_union_his就只能返回前4条记录,剩余的6条就不能返回了
hiu1989 2013-08-22
  • 打赏
  • 举报
回复
试过了,见图
你这里的第1列1005,和第2列的小明还是返回了多行相同的记录。我只要求返回一行。还有,你用in_union_his表来做left join,即,你是用记录数最多的表放在第一位才行,这样一来就不灵活了,那么我每次做查询都要去判定那个表的记录数最多才可进行查询。
其实我设计数据库是这样的,welfare是主表,其它3张表是子表,welfare只返回一行记录就行了,其它表关联后不显示重复记录,重复的为空或null;

hdhai9451你可以用ACCESS数据库来建表测试吗?我数据是ACCESS的,不支持ROW_NUMBER,partition by函数,如果你用mysql或sql server来做的话,即使达到了效果,语句在ACCESS不通过,对我还是没用的
Shawn 2013-08-22
  • 打赏
  • 举报
回复
SELECT  a.keyjobno ,
        a.name ,
        getdate ,
        b.indate ,
        b.createdate ,
        c.escdate ,
        d.activityname ,
        joindate
FROM    welfare a
        INNER JOIN in_union_his b ON a.keyjobno = b.keyjobno
        LEFT JOIN esc_union_his c ON a.keyjobno = c.keyjobno
                                     AND B.ID = C.ID
        LEFT JOIN activityrecord d ON a.keyjobno = d.keyjobno
                                      AND B.ID = D.ID
Andy__Huang 2013-08-22
  • 打赏
  • 举报
回复
你没有关键字关联,那么得自己加上行号,试试:
select a.keyjobno,a.name,getdate,b.indate,b.createdate,c.escdate,d.activityname,joindate 
from (select *,rn=ROW_NUMBER()over(partition by keyjobno order by getdate()) from in_union_his) a
left join (select *,rn=ROW_NUMBER()over(partition by keyjobno order by getdate()) from welfare) b on a.keyjobno=b.keyjobno and a.rn=b.rn
left join (select *,rn=ROW_NUMBER()over(partition by keyjobno order by getdate()) from esc_union_his) c on a.keyjobno=c.keyjobno and a.rn=c.rn
left join (select *,rn=ROW_NUMBER()over(partition by keyjobno order by getdate()) from activityrecord) d on a.keyjobno=d.keyjobno and a.rn=d.rn
xxfvba 2013-08-22
  • 打赏
  • 举报
回复
BCD表用ID连,A表用Keyjobno连接,是否可以试下?
hiu1989 2013-08-22
  • 打赏
  • 举报
回复
@hdhai9451,目前只是用keyjobno来关联。你写的语句我在SQL Server2008中试过,没能达到我的要求。现在我想关联后,如果在同一张表中有相同的记录只显示1条,剩余的为空。多表关联后用distinct是不行的,因为distinc作用在了多个表的字段中。不知hdhai9451你还有没有什么办法来处理我这个问题?如果你想增加字段来关联的话,也可以,只要达到我的要求即可

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧