有人能想出如何擺脫WHERE
子句中的NOT EXISTS
語句嗎?自加入而不是子查詢
SELECT TOP 100 PERCENT
Ftm.AcctID AS [Acct Id],
Act.AccountNumber AS [Account No.],
Act.AccountTypeId,
ISNULL(Cnt.FirstName, '')+ ' ' + ISNULL(Cnt.LastName, '') AS [Full Name],
Ftm.FinTransTypeCode AS [Trans Type],
Ftm.FinTransCode AS [Trans Code],
Fm.FJNo AS [FJ No.],
Fm.ReversalFJNo AS [Reversal FJNo.],
CAST(ISNULL(Fm.FJAmt,0) AS DECIMAL(9, 2)) AS Amount,
Ftc.InterfaceDescr AS [Transaction Desc],
Fm.Comments, Fm.CreatedBy AS [Posted By],
Ftm.Created,RegistrationTypeid, FJDate
FROM
FinMaster AS Fm
INNER JOIN FinTransMaster AS Ftm ON Ftm.FjNo = Fm.FJNo
INNER JOIN dbo.Account AS Act ON Ftm.AcctID = Act.AccountId
INNER JOIN dbo.Contact AS Cnt ON Act.PrimaryContactId = Cnt.ContactId
INNER JOIN FinTransCodes AS Ftc ON Ftc.FinTransCode = Ftm.FinTransCode
WHERE
(Ftm.FinTransTypeCode <> 'PYMT') AND FJDate > getdate()-5
AND (NOT EXISTS (SELECT '' AS Expr1
FROM FinMaster
WHERE (ReversalFjNo = Fm.FJNo)))
AND (NOT EXISTS (SELECT '' AS Expr1
FROM FinTransMaster AS Ftm2
WHERE (FjNo = Ftm.FjNo) AND (FjTransSeqNo < Ftm.FjTransSeqNo)))
ORDER BY Ftm.Created DESC
我想提早找出同樣的事情今天 – 2009-09-12 00:09:38
在SQL Server中,NOT IN/NOT EXISTS都優於LEFT JOIN,因爲它的優化器無法辨別反中加入LEFT JOIN/IS NULL 。它將返回整個結果集,然後過濾出NULL。 – 2009-09-12 00:41:47