Sql 选择表的顶部1

Sql 选择表的顶部1,sql,sql-server,join,left-join,outer-join,Sql,Sql Server,Join,Left Join,Outer Join,尝试选择外部联接表的顶部记录 如果表B中没有记录,则会出现null 如果有多条记录,则只应选择第一条记录 我建立了这个查询,但是我得到了一个错误 SELECT DISTINCT A.Col1 , A.Col2, B.Col2, B.Col3 FROM A LEFT OUTER JOIN (SELECT TOP 1 * FROM B WHERE B.Col1=A.Col1) A ON B.Col1=A.Col1 无法绑定多部分标识符“B.Col1”。 有

尝试选择外部联接表的顶部记录

如果表B中没有记录,则会出现null

如果有多条记录,则只应选择第一条记录

我建立了这个查询,但是我得到了一个错误

 SELECT DISTINCT
        A.Col1 , A.Col2, B.Col2, B.Col3
 FROM   
        A LEFT OUTER JOIN (SELECT TOP 1 * FROM B WHERE B.Col1=A.Col1) A ON B.Col1=A.Col1
无法绑定多部分标识符“B.Col1”。


有人知道如何解决这个问题吗?

如果您只需要一个匹配项,请使用
outer apply

SELECT A.Col1 , A.Col2, B.Col2, B.Col3
FROM A OUTER APPLY
    (SELECT TOP 1 *
     FROM B
     WHERE B.Col1 = A.Col1
    ) B;

如果只需要一个匹配项,请使用
外部应用

SELECT A.Col1 , A.Col2, B.Col2, B.Col3
FROM A OUTER APPLY
    (SELECT TOP 1 *
     FROM B
     WHERE B.Col1 = A.Col1
    ) B;

您可能希望改用
外部应用
。无法绑定的“B.Col1”指的是最后一部分“B.Col1=A.Col1”,因为B是子查询中表的别名(您也将其别名为A),因此在子查询外不可见。您还可以在子查询中引用A.Col1,该子查询也无法解析。子查询语法更难阅读和维护。通常,请使用CTE语法。您可能希望改用
外部应用
。无法绑定的“B.Col1”指的是最后一部分“B.Col1=A.Col1”,因为B是子查询中表的别名(您也将其别名为A),因此在子查询外不可见。您还可以在子查询中引用A.Col1,该子查询也无法解析。子查询语法更难阅读和维护。通常,使用CTE语法。