如何在sqlite的SELECT语句中使用INSERT作为子查询?

时间:2013-08-28 12:45:51

标签: sql sqlite select insert

我想要这样的东西。但我不知道正确的语法。

select id from table1
where name = (insert into table1 (name) values ('value_abcd'))

3 个答案:

答案 0 :(得分:0)

当你说:

WHERE something = somethingElse

somethingElse是一个表达式(something也是如此,但无论如何)。您正在尝试使用INSERT语句作为somethingElse,但INSERT语句不会返回任何内容,因此无法将其作为表达式进行求值。因此,不仅是你试图使语法无效,它在伪代码方式中也没有任何意义。

也许如果你能够更清楚地解释你想做什么(以及为什么),有人可以为你推荐一些东西。

答案 1 :(得分:0)

因此,您有一个包含自动增量主键的表,并且您希望在插入记录后知道其值。

在SQL中,您可以使用last_insert_rowid函数:

INSERT INTO table1(name) VALUES('value_abcd');
SELECT last_insert_rowid();

但是,在大多数情况下,您不需要执行单独的SELECT查询,因为大多数库都有一些函数来返回该值。 例如,SQLite的C API具有sqlite3_last_insert_rowid函数,Android的insert函数直接返回ID。

答案 2 :(得分:0)

如果表的id列设置为identity,则在SQL

insert into table1(name) value('name')
select SCOPE_IDENTITY()

它将返回上次自动生成的idetity值

如果id列未设置为标识,则在SQL

insert into table1(name)
output inserted.id
value('name')

它将返回在单个语句中插入的所有id值。