首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在下一个` `INSERT‘语句中使用插入的ID和’`INSERT‘语句中的插入或IGNORE`

在下一个` `INSERT‘语句中使用插入的ID和’`INSERT‘语句中的插入或IGNORE`
EN

Stack Overflow用户
提问于 2014-10-15 20:06:10
回答 1查看 62关注 0票数 0

我使用sqlit3.7并有一个类似于以下内容的模式:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS subjects (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
);

CREATE TABLE IF NOT EXISTS predicates (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    predicate TEXT NOT NULL UNIQUE
);

CREATE TABLE IF NOT EXISTS objects (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    object BLOB NULL UNIQUE
);

CREATE TABLE IF NOT EXISTS statements (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    subject INTEGER NOT NULL REFERENCES subjects(id) ON DELETE RESTRICT, 
    predicate INTEGER NOT NULL REFERENCES predicates(id) ON DELETE RESTRICT, 
    object INTEGER NULL REFERENCES objects(id) ON DELETE RESTRICT
);

要将一行插入到statements中,首先插入或忽略predicateobject,然后检索ids:

代码语言:javascript
复制
INSERT OR IGNORE INTO predicates(predicate) VALUES (?)
代码语言:javascript
复制
SELECT predicates.id FROM predicates WHERE predicates.predicate = ?

最终执行

代码语言:javascript
复制
INSERT INTO statements(subject, predicate, object) VALUES (?, ?, ?)

我的问题是:是否有一次直接执行这些(准备好的)语句的方法?

代码语言:javascript
复制
INSERT OR IGNORE INTO predicates(predicate) VALUES (?);
SELECT predicates.id FROM predicates WHERE predicates.predicate = ?;
INSERT OR IGNORE INTO objects(object) VALUES (?);
SELECT predicates.id FROM objects WHERE objects.object = ?;
INSERT INTO statements(subject, predicate, object) VALUES (?, ?, ?);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 20:34:22

只有在实际插入了某些行时,罗威德()才能工作。

您可能总是需要选择,但可以将它们作为子查询执行:

代码语言:javascript
复制
INSERT OR IGNORE INTO predicates(predicate) VALUES (?);
INSERT OR IGNORE INTO objects(object) VALUES (?);
INSERT INTO statements(subject, predicate, object)
VALUES (?,
        (SELECT id FROM predicates WHERE predicate = ?),
        (SELECT id FROM objects WHERE object = ?)
       );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26391151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档