加入两个表并从第二个表中只返回一行

时间:2014-10-15 20:28:17

标签: sql-server sql-server-2012

我有两张桌子。两个表都包含一个可用于将它们连接在一起的ID。但是,表2可以有more than one row for the same ID。表1将始终有一行。

例如,table 1包含60,000行。当我使用table2进行左内联接时,它返回~171 000行。

我想要完成的是从表2返回第一行,所以当我加入它们时,我不会创建重复的记录。

我不确定这是否是正确的方法,但这是我尝试过的:

SELECT I.*, a.Name from table 1 I 
INNER JOIN (SELECT MIN (a.ID), a.NAME FROM table 2 group by a.ID) as a 
on I.ID = a.ID

我收到以下错误:

  

'i'附近的语法不正确。

有关如何解决此问题的任何建议?或者以不同的方式得到结果?

1 个答案:

答案 0 :(得分:3)

这样的事情将保证第二个表中每个id一行。

;WITH singleRows AS (
SELECT
    *
    , ROW_NUMBER() OVER (PARTITION BY id ORDER BY name) as rownum
FROM
    table_2)

SELECT
    *
FROM
    table_1 t1

    JOIN singleRows t2
        ON t1.id = t2.id
        AND t2.rownum = 1