计算 sqlite INSERT SELECT 的行数

发布于 2024-12-19 04:24:25 字数 499 浏览 2 评论 0原文

我有两个 sqlite 表,其中一个表具有另一个表的外键。

CREATE TABLE a (id INTEGER PRIMARY KEY NOT NULL, value TEXT UNIQUE NOT NULL);
CREATE TABLE b (id INTEGER PRIMARY KEY NOT NULL, a INTEGER REFERENCES a (id) NOT NULL, value TEXT NOT NULL);

我正在使用 SELECT 执行 INSERTb 中。

INSERT INTO b (a, value) SELECT ?value, a.id FROM a WHERE a.value == ?a;

我如何知道 a 行是否插入到 b 中?对刚刚插入的值执行SELECT并检查它们是否存在,似乎效率相当低。

I have two sqlite tables, where one table has a foreign key of the other.

CREATE TABLE a (id INTEGER PRIMARY KEY NOT NULL, value TEXT UNIQUE NOT NULL);
CREATE TABLE b (id INTEGER PRIMARY KEY NOT NULL, a INTEGER REFERENCES a (id) NOT NULL, value TEXT NOT NULL);

I am doing an INSERT with a SELECT into b.

INSERT INTO b (a, value) SELECT ?value, a.id FROM a WHERE a.value == ?a;

How do I know weather a row was inserted into b or not? Doing a SELECT for the just inserted values and checking weather they exist, seems rather inefficient.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

榕城若虚 2024-12-26 04:24:25

我希望 changes() 函数可以帮助您。

changes() 函数返回已更改的数据库行数
由最近完成的 INSERT 更改或插入或删除,
DELETE 或 UPDATE 语句,不包括较低级别的语句
触发器。 Changes() SQL 函数是一个包装器
sqlite3_changes() C/C++ 函数,因此遵循相同的规则
计算变化。

因此,如果插入了一行,changes() 返回 1,否则返回 0。

I hope the changes() function can help you.

The changes() function returns the number of database rows that were
changed or inserted or deleted by the most recently completed INSERT,
DELETE, or UPDATE statement, exclusive of statements in lower-level
triggers. The changes() SQL function is a wrapper around the
sqlite3_changes() C/C++ function and hence follows the same rules for
counting changes.

So changes() returns 1 if a row was inserted and 0 otherwise.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文