简体   繁体   English

如何转换UPDATE外部适用于Update Left Join?

[英]How to convert UPDATE outer apply to Update Left Join?

I am running this query on sql 2008 but my client need this to run on sql 2000. can someone help me convert this query to sql 2000? 我正在sql 2008上运行此查询,但是我的客户端需要在sql 2000上运行此查询。有人可以帮助我将此查询转换为sql 2000吗?

Update cust set Balance = dv.balance 
From (SELECT hb.Balance,dv.custnum FROM [#custnumtbl] as dv 
OUTER APPLY (SELECT TOP 1 Balance,custnum FROM CLedger b 
WHERE b.CustNum = dv.custnum ORDER BY Pdate DESC) as hb) as dv 
where cust.CustNum = dv.custnum

I'm pretty sure this is equivalent to the following correlated subquery: 我很确定这等效于以下相关子查询:

Update cust
    set Balance = (SELECT TOP 1 cl.Balance
                   FROM [#custnumtbl] dv JOIN
                        Cledger b
                        ON b.CustNum = dv.custnum
                   WHERE dv.custnum = cust.CustNum
                   ORDER BY Pdate DESC
                  );

SQL2000 does not support ORDER inside the view SQL2000不支持视图内的ORDER

UPDATE cust SET Balance = cl.Balance
FROM 
    cust 
    INNER JOIN [#custnumtbl] tmp ON cust.CustNum = tmp.CustNum
    LEFT OUTER JOIN CLedger cl ON 
        cl.CustNum = cust.CustNum 
        AND PDate = (SELECT MAX(PDate) FROM CLedger WHERE CustNum = cl.CustNum)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM