连接两个表并仅返回第二个表中的一行

smr*_*mr5 0 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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

“i”附近的语法不正确。

关于如何解决这个问题有什么建议吗?或者以不同的方式得到结果?

Rya*_* B. 6

这样的事情将保证第二个表中的每个 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
Run Code Online (Sandbox Code Playgroud)