sqlite3 select 来自多个表的记录

sqlite3 select records from multiple tables

我有点卡在一个相当简单的 sqlite 查询上 - 可能是因为我已经研究这个问题几个小时了,需要休息一下。

我有 2 tables(假设交易现在只处理流入的资金):

            db.run(`CREATE TABLE accounts (
                sort TEXT NOT NULL,
                account TEXT NOT NULL,
                name TEXT NOT NULL,
                balance REAL DEFAULT 0.00,
                PRIMARY KEY(routing, account)
            );`);
            db.run(`CREATE TABLE transactions (
                id TEXT PRIMARY KEY NOT NULL,
                to_sort TEXT NOT NULL,
                to_account TEXT NOT NULL,
                amount REAL NOT NULL,
                currency TEXT DEFAULT "USD"
            );`);

仅针对此示例,假设我的帐户中有以下内容 table:

sort: 123 account: 123456
sort: 456 account: 456789
sort: 789 account: 789100

我能够相当轻松地select 为个人帐户进行交易。 我只是做了一个“select * 来自 to_sort = '123' 和 to_account='123456'”的交易

交易 table 计数可能有很多交易,其中一些是有效的并且与上述帐户相关。其中一些可能来自随机帐户(即排序:999,帐户:99999)

我的问题与以下场景有关: 我希望能够 select 与帐户 table 中的所有帐户相关的所有交易。例如,我只希望上述 3 个帐户的每笔交易。

我认为这应该是:

SELECT * from transactions, accounts 
WHERE transactions.to_sort = accounts.sort 
AND transactions.to_account = accounts.account
ORDER BY
    transactions.to_sort ASC, transactions.to_account ASC

我希望能够 select 所有与账户中的账户无关的交易 table。我对此有点困惑,因为帐户 table 中的主键是一个复合键。对于单个列键,我可以执行“...where id not in (select id from accounts)”。但是我不太确定如何处理上面的 tables。

尝试

WHERE NOT transactions.to_sort = accounts.sort 

I want to be able to select all transaction that are NOT related to the accounts in the accounts table

最简单的方法是 NOT EXISTS:

SELECT t.*
FROM transactions t
WHERE NOT EXISTS (
  SELECT 1 FROM accounts a 
  WHERE a.account = t.to_account AND a.sort = t.to_sort
)