根据内部联接中的列删除重复项

时间:2015-07-31 04:47:13

标签: sql-server join duplicates

这正是我想要的返回,除了需要删除一些行,因为当我只希望它匹配第一个匹配时,内连接匹配多行。

select table1.IDa, table1.IDb, table1.name,
       table1b.IDa, table1b.IDb, table1b.name  
from

(select IDa,IDb,name from mytable) table1 

inner join 

(select IDa,IDb,name from mytable) table1b 

ON  

table1.IDa = table1b.IDa 
and table1.IDb = table1b.IDb 

order By table1.IDa

所以我得到了这个:

IDa     IDb     name   IDa     IDb     name
1       1       bob    1       1       public
1       1       bob    1       1       smith
1       2       sally  1       2       jones
2       1       nancy  2       1       dole

但我希望收到这个:

IDa     IDb     name   IDa     IDb     name
1       1       bob    1       1       public
1       2       sally  1       2       jones
2       1       nancy  2       1       dole

我只想要返回IDa + IDb组合的第一个匹配。

2 个答案:

答案 0 :(得分:0)

基于提问者的评论

  

这将是最早进入数据库的入口,它也将是   与IDa,IDb的订单相同。这也是第一场比赛   返回结果

尝试此查询:

select table1.IDa, table1.IDb, table1.name,
       table1b.IDa, table1b.IDb, table1b.name  
from

(select IDa,IDb,name from mytable) table1 

inner join 

(select IDa,IDb,name, ROW_NUMBER() OVER( ORDER BY Ida,IDb) as r from mytable ) table1b 

ON  

table1.IDa = table1b.IDa 
and table1.IDb = table1b.IDb 
and table1b.r=1

order By table1.IDa

答案 1 :(得分:0)

根据您的意见,这应该有效,但<h:form id="inputForm"> ... </h:form> Smith具有相同的PublicIDa值,希望它是数据问题。

IDb