0

我有 2 张桌子。

表格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
4

4 回答 4

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

于 2012-09-24T11:55:56.167 回答
1

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

您可以使用distinct子句:

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

这里是 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 

这里是 MSDN 的链接。

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

注意: 在这两个查询中,我都使用了别名 ( t1, t2)。它更具可读性。

于 2012-09-23T20:56:02.497 回答
1
SELECT DISTINCT NAME
     , DATA
  FROM Table2
 WHERE NAME IN (SELECT NAME
                  FROM Table1)

这里有几个不同的选择......

于 2012-09-23T20:59:06.883 回答
0

您是否正在寻找类似的东西:

select Table2.Name, Table2.Data, count(*) from Table1 
     inner join Table2 on Table1.Name= Table2.Name
     group by Table2.Name, Table2.Data;
于 2012-09-23T20:48:29.393 回答