gpt4 book ai didi

sql - 将两部分 SQL 查询组合成一个查询

转载 作者:行者123 更新时间:2023-12-04 14:21:18 25 4
gpt4 key购买 nike

我有一个 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 不匹配但符合加入条件。

最佳答案

尝试

SELECT distinct E2.*, T.reference_number 
FROM Transaction_Entries E
INNER JOIN Transactions T ON (E.transaction_id=T.id)
INNER JOIN Transactions T2 on T.reference_number = T2.reference_number
INNER JOIN Transaction_Entries E2 on T2.id = E2.transaction_Id
where E.account_id = X

如果该帐户有多个 transaction_Entries 相同的 reference_number,您可能会得到重复的

编辑 添加@van 的建议我相信他是正确的,谢谢。

编辑这被编辑为限制为相同的 account_id 的

SELECT distinct E2.*, T.reference_number  
FROM Transaction_Entries E
INNER JOIN Transactions T ON (E.transaction_id=T.id)
INNER JOIN Transactions T2 on T.reference_number = T2.reference_number
INNER JOIN Transaction_Entries E2 on T2.id = E2.transaction_Id and E2.account_id = E.account_id
where E.account_id = x

关于sql - 将两部分 SQL 查询组合成一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2993019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com