【问题标题】:Joining subquery using a column of outer query使用外部查询列连接子查询
【发布时间】:2020-02-04 13:35:02
【问题描述】:

这是我的连接查询:

Select * 
    From MetricAlertMonitorings maa
        Left Join (
                    Select Top 1 *
                        From [dbo].MetricAlertMonitoringsDeliveredLog
                            Where maa.MetricAlertMonitoringID = [dbo].MetricAlertMonitoringsDeliveredLog.MetricAlertMonitoringID
                            Order By DeliveredDateTime asc
                ) mdl
                    ON maa.MetricAlertMonitoringID = mdl.MetricAlertMonitoringID
                Left Join (
                    Select Top 1 *
                        From [dbo].MetricAlertMonitoringsAcknowledgedLog
                            Where maa.MetricAlertMonitoringID = [dbo].MetricAlertMonitoringsAcknowledgedLog.MetricAlertMonitoringID
                            Order By MetricAlertMonitoringsStatusID asc, AcknowledgedDateTime asc
                ) mal
                    ON maa.MetricAlertMonitoringID = mal.MetricAlertMonitoringID

但不知何故,查询无法识别列maa.MetricAlertMonitoringID。我得到错误:

Msg 4104, Level 16, State 1, Line 7
The multi-part identifier "maa.MetricAlertMonitoringID" could not be bound.
Msg 4104, Level 16, State 1, Line 14
The multi-part identifier "maa.MetricAlertMonitoringID" could not be bound.

我需要将我的查询作为子查询加入。知道如何解决这个问题吗?

【问题讨论】:

    标签: sql sql-server tsql join sql-server-2017


    【解决方案1】:

    连接的子查询不能引用外部查询中的列,因此会出现错误。我认为你应该改用OUTER APPLY

    Select * 
    From MetricAlertMonitorings maa
    outer apply (
        Select Top 1 *
        From [dbo].MetricAlertMonitoringsDeliveredLog
        Where maa.MetricAlertMonitoringID = [dbo].MetricAlertMonitoringsDeliveredLog.MetricAlertMonitoringID
        Order By DeliveredDateTime asc
    ) mdl
    outer apply (
        Select Top 1 *
        From [dbo].MetricAlertMonitoringsAcknowledgedLog
        Where maa.MetricAlertMonitoringID = [dbo].MetricAlertMonitoringsAcknowledgedLog.MetricAlertMonitoringID
        Order By MetricAlertMonitoringsStatusID asc, AcknowledgedDateTime asc
    ) mal
    

    【讨论】:

    • 太棒了。所以我只需要使用 Outer Apply 并删除 ON 子句。太棒了.. 非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2016-06-04
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多