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
)
我有点卡在一个相当简单的 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
)