我正在嘗試從 GnuCash SQLite 資料庫中提取資料。相關表格包括accounts、transactions和splits。簡單地說,accounts包含transactions哪些包含splits,并且每個拆分都指向一個帳戶。
根據每筆交易是否包含特定型別的交易費用,交易需要進行不同的處理——在這種情況下,交易是否包含與 account 相關的拆分8190-000。
我設定了兩個查詢,一個處理有交易費的交易,一個處理沒有交易費的交易。查詢有效,但它們笨拙且冗長,我相信有更好的方法來做到這一點。我確實看到not exists了這個答案,但無法弄清楚如何讓它在這種情況下作業。
我當前的查詢如下所示:
-- Find all transactions containing a split with account code 8190-000
select tx_guid from transactions
inner join
(select tx_guid from
(splits inner join accounts on splits.account_guid = accounts.guid)
where accounts.code = "8190-000") fee_transactions
on fee_transactions.tx_guid = transactions.guid;
-- Find all transactions not containing a split with account code 8190-000
select guid from transactions
except
select tx_guid from transactions
inner join
(select tx_guid from
(splits inner join accounts on splits.account_guid = accounts.guid)
where accounts.code = "8190-000") fee_transactions
on fee_transactions.tx_guid = transactions.guid;
鑒于我需要在其他查詢中使用這些結果,那么獲取這些交易串列的更簡單、更簡潔的方法是什么?
uj5u.com熱心網友回復:
您可以將 EXISTS 用于您的第一個查詢,如下所示:
SELECT t.*
FROM transactions t
WHERE EXISTS (
SELECT 1
FROM splits s INNER JOIN accounts a
ON s.account_guid = a.guid
WHERE a.code = '8190-000' AND ?.tx_guid = t.guid
);
更改?為sor a,具體取決于哪個表包含列tx_guid( splitsor accounts),因為您的問題不清楚。
此外,更改NOT EXISTS為您的第二個查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419557.html
標籤:
