2012-09-23 129 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

相關問題