Sql server 如何将此查询更改为使用联接(内部或左侧)而不是子查询来获得相同的结果

Sql server 如何将此查询更改为使用联接(内部或左侧)而不是子查询来获得相同的结果,sql-server,Sql Server,如何将此查询更改为使用联接(内部或左侧),而不使用子查询 SELECT * FROM External_Blk_Itm_Contracts ELC WHERE NOT EXISTS(SELECT NULL FROM [BUDCONTRACTS] c INNER JOIN BU

如何将此查询更改为使用联接(内部或左侧),而不使用子查询

 SELECT * FROM   External_Blk_Itm_Contracts ELC
    WHERE
    NOT EXISTS(SELECT
                    NULL
                FROM        
                    [BUDCONTRACTS] c
                INNER JOIN 
                    BUDTERMINALS t on t.TerminalID = c.TerminalID  AND  t.MBFTERMINALNAME = ELC.TerminalName AND  c.CONTRACTNAME = ELC.ContractName 
                INNER JOIN 
                    BudCustomers ct on ct.CustomerId = c.CustomerId AND ELC.CustomerName = ct.LegalName
               )
                AND ELC.ContractName = '00-000'
未经测试(显然):

关于这一点,我最大的问题是为什么我们要使用名称字段加入ELC?ELC上没有TerminalID、CustomerID和CotractID等吗?

我通过

        SELECT ELC.* FROM External_Blk_Itm_Contracts ELC
        INNER JOIN BUDTERMINALS BT ON BT.MBFTERMINALNAME = ELC.TerminalName AND ELC.ContractName = '00-000' 
        INNER JOIN BudCustomers BCUST ON BCUST.LegalName = ELC.CustomerName
        LEFT JOIN BUDCONTRACTS BCON ON BCON.CONTRACTNAME = ELC.ContractName AND BCON.TERMINALID = BT.TERMINALID AND BCON.CUSTOMERID = BCUST.CustomerID  
        WHERE    BCON.CONTRACTID IS NULL

我认为它应该表现得更好,因为左连接会降低效率,我想涉及的表的模式是什么?特别是主键和外键列?你能发布一个吗?我希望相同的查询与不带子查询的连接@TabAlleman Not duplicate的可能重复项相同
        SELECT ELC.* FROM External_Blk_Itm_Contracts ELC
        INNER JOIN BUDTERMINALS BT ON BT.MBFTERMINALNAME = ELC.TerminalName AND ELC.ContractName = '00-000' 
        INNER JOIN BudCustomers BCUST ON BCUST.LegalName = ELC.CustomerName
        LEFT JOIN BUDCONTRACTS BCON ON BCON.CONTRACTNAME = ELC.ContractName AND BCON.TERMINALID = BT.TERMINALID AND BCON.CUSTOMERID = BCUST.CustomerID  
        WHERE    BCON.CONTRACTID IS NULL