使用重复项连接表SQL Server

时间:2012-11-06 11:39:30

标签: sql sql-server sql-server-2008 join duplicate-removal

我有一张桌子

col1

1
2

和其他表

col1    col2    col3

1          1    data value one                                    
1          2    data value one                                    
2          3    data value two   

我想加入两个表以获得以下结果

col1  col2  col3

1       1    data value one
2       3    data value two

第二个表有重复,但我只需要加入一个(随机)。我已尝试使用Inner Join,Left Join,Right Join并始终返回所有行。实际上我使用SQL Server 2008

3 个答案:

答案 0 :(得分:3)

select t1.col1, t2.col2, t2.col3 from table1 t1
cross apply
(select top 1 col2, col3 from table2 where col1 = t1.col1 order by newid()) t2

答案 1 :(得分:0)

使用Distinct它会消除重复,但您确定两行都包含相同的数据吗?

答案 2 :(得分:0)

您可以使用ROW_NUMBER函数和ORDER BY NEWID()为col1中的每个值获取一个随机行:

WITH CTE AS
(   SELECT  Col1,
            Col2,
            Col3, 
            [RowNumber] = ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY NEWID())
    FROM    Table2
)
SELECT  *
FROM    Table1
        INNER JOIN CTE
            ON CTE.Col1 = table1.Col1
            AND CTE.RowNumber = 1 -- ONLY GET ONE ROW FOR EACH VALUE