2012-09-23 47 views
0

我有2个表。tsql在第二个表中连接两个带有重复记录的表

表1:

Id  Name 

1  John 
2  Mike 
3  Sam 

表2:

Name Data 

John Data1 
John Data1 
John Data1 
Mike Data2 
Mike Data2 
Sam Data3 

如果我写

select Table2.Name, Table2.Data 
from Table1 
inner join Table2 on Table1.Name= Table2.Name 

我得到的所有的重复数据。

我想能够检索类似:

John Data1 
Mike Data2 
Sam Data3 
+0

您的数据没有足够的意义。为什么在第二个表中重复'Data1'? – codingbiz

回答

0

你是否在寻找类似:

select Table2.Name, Table2.Data, count(*) from Table1 
    inner join Table2 on Table1.Name= Table2.Name 
    group by Table2.Name, Table2.Data; 
1

有两种方法可以做到这一点。

您可以使用distinct条款:

select distinct t2.Name, t2.Data 
from Table1 t1 
inner join Table2 t2 on t1.Name= t2.Name 

Here是链接MSDN。

您可以使用group by

select t2.Name, t2.Data 
from Table1 t1 
inner join Table2 t2 on t1.Name= t2.Name 
group by t2.Name, t2.Data 

Here是链接MSDN。

我更喜欢第二种解决方案,因为我总是可以添加分组功能。

注: 在这两个查询我用别名(t1t2)。它更具可读性。

1
SELECT DISTINCT NAME 
    , DATA 
    FROM Table2 
WHERE NAME IN (SELECT NAME 
        FROM Table1) 

这里有一些不同的选择......

1

您可以使用CTE本产品和应用row_number()

;with cte as 
(
    select t1.name, t2.data, 
    row_number() over(partition by t1.id order by t1.id) rn 
    from table1 t1 
    inner join table2 t2 
    on t1.name = t2.name 
) 
select * 
from cte 
where rn = 1 

或非CTE版本:

select * 
from 
(
    select t1.name, t2.data, 
    row_number() over(partition by t1.id order by t1.id) rn 
    from table1 t1 
    inner join table2 t2 
    on t1.name = t2.name 
) x 
where rn = 1 

请参阅SQL Fiddle with Demo

相关问题