SQL - 如何选择distinct并连接多个表而不复制数据

时间:2015-03-11 00:54:55

标签: sql sql-server join

我有以下表格设置/数据:

create table #temp (irecordid int, sdocumentno varchar(20), dtfileddate datetime, mnyconsideration money)

insert into #temp values (1, '3731572', '6-30-2014', 120.00)

Create table #temp2 (irecordid int, address varchar(255))

insert into #temp2 values (1, '406 N CUSTER')
insert into #temp2 values (1, '2015 E HANSON')


Create table #temp3 (irecordid int, srdocumentno varchar(25))
insert into #temp3 values (1, '55489')
insert into #temp3 values (1, '99809')

我试图选择所以我只得到每个表的不同实例。我在尝试:

select distinct sdocumentno, address, srdocumentno
from #temp t1
join #temp2 t2 on t1.irecordid = t2.irecordid
join #temp3 t3 on t1.irecordid = t3.irecordid

我的结果如下:

3731572 2015 E HANSON   55489
3731572 2015 E HANSON   99809
3731572 406 N CUSTER    55489
3731572 406 N CUSTER    99809

我真的很喜欢每个表中的不同数据,如下所示:

3731572   2015 E HANSON   55489
3731572   406 N CUSTER   99809

我有办法实现这个目标吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我猜你想在“行号”上join,但这不存在。但是,您可以生成一个然后加入它们:

select sdocumentno, address, srdocumentno
from #temp t1 join
     (select t2.*,
             row_number() over (partition by irecordid order by (select NULL)) as seqnum
      from #temp2 t2
     ) t2
     on t1.irecordid = t2.irecordid join
     (select t3.*,
             row_number() over (partition by irecordid order by (select NULL)) as seqnum
      from #temp2 t3
     ) t3
     on t1.irecordid = t3.irecordid and t2.seqnum = t3.seqnum;

如果列表长度不同,您可以使用full outer join