gpt4 book ai didi

sql - SQlite:如果不存在,请选择“插入”

转载 作者:行者123 更新时间:2023-12-03 18:20:22 24 4
gpt4 key购买 nike

假设我们有一个定义了的表:


如果不存在信号,则创建表(严格的整数主键自动递增,名称为TEXT)


该表最初是空的。
我想通过选择获得给定名称的名字,如果名字不存在,则添加它并获得新的自动递增的ID。

我想使用此查询以便在需要时自动生成用作另一个表中的外键的新ID。我必须注意表演,所以我不能继续做:


检查名称是否存在,并使用SELECT返回ID
如果返回的id为null,则使用INSERT创建一个新条目
使用新的SELECT再次获得新的ID


是否可以通过单个类似SELECT的查询来完成?

谢谢!

最佳答案

我认为只有一个选择号。
假设我要在大表“崩溃”中插入id_build = 3,hashed_value = 1。

示例中的代码首先选择检查该值是否已在表中,如果是,则跳过使用where .. is null的插入,然后从已保存到临时表中的ID中检索ID。
例如:

create temporary table if not exists Variablez(Name TEXT primary key on conflict replace, Value TEXT);            --storing vars
insert into Variablez(Name, Value) values ('tmp_id', (select id_crash from crash where hashed_value = "1" )); --put id if was existing
insert into crash(id_build, hashed_value) select 3, 1 where (select Value from Variablez where Name = 'tmp_id' ) is null; -- insert if not exists

select
case
when (select Value from Variablez where name = 'tmp_id' ) is null then
'0'
else
'1'
end
as existing,
case
when (select Value from Variablez where name = 'tmp_id' ) is null then
(select id_crash from crash where hashed_value = "1")
else
(select Value from Variablez where name = 'tmp_id')
end
as id_returned;

关于sql - SQlite:如果不存在,请选择“插入”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9416575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com