微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlite3 从多个表中选择记录

如何解决sqlite3 从多个表中选择记录

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

我有 2 个表(假设交易目前只处理收到的资金):

            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"
            );`);

仅就本例而言,假设我的帐户表中有以下内容

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

我能够相当轻松地为个人帐户选择交易。 我只是做了一个“从交易中选择 *,其中 to_sort = '123' 和 to_account='123456'”

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

我的问题与以下情况有关: 我希望能够选择与账户表中所有账户相关的所有交易。例如,我只想要上述 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

我希望能够选择与帐户表中的帐户无关的所有交易。我对此有点困惑,因为帐户表中的主键是复合键。对于单列键,我可以执行“...其中 id 不在(从帐户中选择 id)”。但我不太确定如何处理上面的表格。

解决方法

试试

WHERE NOT transactions.to_sort = accounts.sort 
,

我希望能够选择所有与此无关的交易 账户表中的账户

最简单的方法是使用 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
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。