0
我被要求編寫一個只返回具有特定操作代碼(內部名稱)的帳戶的查詢。有6個代碼必須在帳戶上,並且不能有其他代碼可用。該表存儲在一個名爲tblTrans表(見下文):慢SQL查詢返回 - 如何獲得更好的結果?
AccountNo ActionCode TransactionNo
1234 Code1 45646453
1234 Code2 88758475
1234 Code3 48978978
1234 Code4 15687898
1234 Code5 59878988
1234 Code6 12345677
2548 Code1 45464533
2548 Code2 89789489
2548 Code3 89789781
2548 Code4 16878983
2548 Code5 59889884
2548 Code6 12456776
2548 Code12 12348887
因此所需的輸出將只返回帳戶1234
目前這正與查詢做過類似
SELECT AccountNo, ActionCode, TransactionNo
FROM tblTrans AS t1
INNER JOIN
tblTrans AS t2 ON t1.AccountNo = t2.AccountNo
tblTrans AS t3 ON t2.AccountNo = t3.AccountNo
tblTrans AS t4 ON t3.AccountNo = t4.AccountNo
tblTrans AS t5 ON t4.AccountNo = t5.AccountNo
tblTrans AS t6 ON t5.AccountNo = t6.AccountNo
WHERE t1.ActionCode = 'Code1'
AND t2.ActionCode = 'Code2'
AND t3.ActionCode = 'Code3'
AND t4.ActionCode = 'Code4'
AND t5.ActionCode = 'Code5'
AND t5.ActionCode = 'Code6'
AND t6.AccountNo NOT IN (SELECT ActionCode
FROM tblTrans
WHERE ActionCode IN ('Code12'))
對不起,如果語法出來了,我不得不爲了安全原因改變一些細節!
這實際上運行非常緩慢,扼流系統很少。我的問題是,是否有更好的方式來編寫這種類型的查詢。我對CTE的瞭解不多,但聽起來似乎適合?
爲什麼認爲,這將有更好的表現? –
此版本比我的第一次嘗試表現更好。我在比較執行計劃的基礎上這樣說。 –
「DISTINCT」是否存在問題? –