我有一個SQL查詢,目前我正在通過執行兩個查詢來解決這個問題。我想知道是否有一種方法可以在單個查詢中實現,從而提高效率。將兩部分SQL查詢合併爲一個查詢
考慮兩個表:
Transaction_Entries表和交易,每一個定義如下:
Transactions
- id
- reference_number (varchar)
Transaction_Entries
- id
- account_id
- transaction_id (references Transactions table)
注:有每個事務多個事務條目。一些事務是相關的,並且將具有相同的reference_number字符串。
要獲得所有交易條目帳戶X,然後我會做
SELECT E.*, T.reference_number, sum(debit_value) total
FROM Transaction_Entries E
JOIN Transactions T ON (E.transaction_id=T.id)
where E.account_id = X
接下來的部分是最困難的部分。我想查找所有相關交易,而不管帳戶ID。首先,我列出了在前一個結果集中找到的所有唯一參考號。然後,對於每一個,我都可以查詢具有該參考號碼的所有交易。假設我認爲所有從以前的查詢的行中PreviousResultSet
UniqueReferenceNumbers = GetUniqueReferenceNumbers(PreviousResultSet) // in Java
foreach R in UniqueReferenceNumbers // in Java
SELECT *, sum(debit_value) total
FROM Transaction_Entries
where transaction_id IN (SELECT *
FROM Transactions
WHERE reference_number=R)
AND account_id = X
GROUP BY another_field
任何建議,我怎麼可以把這個變成一個高效的查詢?
注:我編輯了原始問題。新增加的事實是,當我執行第二個查詢時,我只查找與reference_number相匹配的事務條目並具有相同的帳戶ID。另外,我正在嘗試按another_field進行分組,並根據該分組總結debit_values。
我在嘗試使用@Gratzy提供的解決方案時發現的是,重複的行正在返回,因此總和(debit_value)總是它應該是的值的兩倍。我認爲這是因爲其中有其他的Transaction_Entries與account_id不匹配,但與匹配條件相匹配。
數據庫和版本? – 2010-06-07 20:48:16