当前位置: 首页 > 面试题库 >

SQLite-在一条语句中进行SELECT或INSERT和SELECT

公孙嘉禧
2023-03-14
问题内容

我试图避免编写单独的SQL查询来实现以下情况:

我有一个称为值的表:

值:

id INT (PK)
data TEXT

我想检查表中是否存在某些数据,如果存在,则返回其ID,否则将其插入并返回其ID。

(非常)幼稚的方式是:

select id from Values where data = "SOME_DATA";

如果id不为null,请接受。如果id为null,则:

insert into Values(data) values("SOME_DATA");

然后再次选择它以查看其ID或使用返回的ID。

我正在尝试使上述功能合而为一。我想我已经接近了,但我还没做到:到目前为止,我明白了这一点:

select id from Values where data=(COALESCE((select data from Values where data="SOME_DATA"), (insert into Values(data) values("SOME_DATA"));

我正在尝试利用以下事实:第二个选择将返回null,然后将返回COALESCE的第二个参数。到目前为止没有成功。我想念什么?


问题答案:

您的命令不起作用,因为在SQLINSERT中不会返回值。

如果data列上有唯一的约束/索引,则可以在盲目插入该值时使用它来防止重复。这使用了SQLite的INSERT OR IGNORE扩展名:

INSERT OR IGNORE INTO "Values"(data) VALUES('SOME_DATE');
SELECT id FROM "Values" WHERE data = 'SOME_DATA';


 类似资料:
  • 主要内容:语法,实例,使用一个表来填充另一个表SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。 语法 INSERT INTO 语句有两种基本语法,如下所示: 在这里,column1, column2,...columnN 是要插入数据的表中的列的名称。 如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。SQLite 的 INSERT INTO

  • 主要内容:语法,实例,设置输出列的宽度,Schema 信息SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。 语法 SQLite 的 SELECT 语句的基本语法如下: 在这里,column1, column2...是表的字段,他们的值即是您要获取的。如果您想获取所有可用的字段,那么可以使用下面的语法: 实例 假设 COMPANY 表有以下记录: 下面是一个实例,使用 SELE

  • 通过 SQL,您可以从一个表复制信息到另一个表。 INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。 SQL INSERT INTO SELECT 语句 INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。 SQL INSERT INTO SELECT 语法 我们可以从一个表中

  • 问题内容: 我想写这样的SQLite语句: 但我没有这样的列RowNumber。我的桌子上有主键。但是默认情况下我可以使用行号吗? 我也在搜索有关编写更复杂的SQLite语句的信息。因此,如果您在书签中有一些链接,请分享。 谢谢。 问题答案: 您想使用LIMIT和OFFSET 也可以用以下速记语法表示 其中,代表偏移量,它是排他的,代表数量,因此,例如 将返回第51-100行

  • 大家好,我有一个多个insert语句的问题,我需要插入许多记录。我用这种方式编写,但记录没有插入到“userbill”表中。帮帮我?? ..代码如下: logcat: 09-05 13:12:48.610:D/DalvikVM(7982):GC_FOR_ALLOC释放314K,10%释放5030K/5568K,暂停17ms,共18ms 09-05 13:12:48.610:I/dalvikvm-h

  • 问题内容: 我有一个结构的SQLite表“ Details”: 我想随机选择一行,然后从三个不同的行中选择三个名称(同样最好随机选择)。我希望所有这些都可以从一个SQLite语句返回。例如 我的尝试可以从下面看到,但是有两个问题: 这三个额外的名称不一定总是不同的-我似乎无法排除先前选择的名称,因为变量b / c / d不在其自身的COALESCE函数范围内。 由于每个嵌套选择都使用Random(