我有一张桌子
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
。
答案 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