我有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
答案 0 :(得分: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的链接。
我更喜欢第二种解决方案,因为我总是可以添加分组功能。
注意:强>
在两个查询中,我使用了别名(t1
,t2
)。它更具可读性。
答案 1 :(得分:1)
SELECT DISTINCT NAME
, DATA
FROM Table2
WHERE NAME IN (SELECT NAME
FROM Table1)
这里有几个不同的选择......
答案 2 :(得分: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
答案 3 :(得分:0)
您正在寻找类似的东西:
select Table2.Name, Table2.Data, count(*) from Table1
inner join Table2 on Table1.Name= Table2.Name
group by Table2.Name, Table2.Data;