【问题标题】:Select top 1 of table选择表的顶部 1
【发布时间】:2017-06-28 23:18:31
【问题描述】:

试图选择外部连接表的顶部记录

如果表 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
  • 无法绑定的“B.Col1”指的是最后一部分“B.Col1=A.Col1”,因为B是子查询中表的别名(您也将其别名为A ) 所以在子查询之外是不可见的。您还可以在子查询中引用 A.Col1 ,这也无法解析。子查询语法更难阅读和维护。一般来说,使用 CTE 语法。

标签: sql sql-server join left-join outer-join


【解决方案1】:

如果你只想要一个匹配,那么使用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;

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2017-05-26
    • 1970-01-01
    相关资源
    最近更新 更多