【问题标题】:How can i use INSERT as subquery in SELECT statement in sqlite?如何在 sqlite 的 SELECT 语句中使用 INSERT 作为子查询?
【发布时间】:2013-08-28 12:45:51
【问题描述】:

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

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

【问题讨论】:

  • 我第一次使用 2 个查询插入到 table1 中,然后从 table1 中选择 col1。但我想要 1 个查询而不是 2..
  • INSERT 语句不返回任何数据,因此您无法将其用作子查询。你到底想做什么?
  • 我想要这样的东西。但我不知道正确的语法...{ select id from table1 where name= (insert into table1 (name) values ('value_abcd')); }
  • 您使用哪种语言访问数据库?
  • 如果 sqlight 支持该功能,您可以使用触发器

标签: sql sqlite select insert


【解决方案1】:

所以您有一个带有自动递增主键的表,并且您想在插入记录后知道它的值。

在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】:

    当你说:

    WHERE something = somethingElse
    

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

    也许如果您能尝试更清楚地解释您正在尝试做什么(以及为什么),那么有人可以为您提供建议。

    【讨论】:

    • 可以说,我有 2 张桌子。 Table2 具有从 Table1 继承的外键,即 (table1 -> table2)。当用户在table1中输入信息时,同时从table1中选择key(table2的外键)。如何在table2中插入数据?
    【解决方案3】:

    如果表的id列设置为identity,那么在SQL中

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

    它将返回最后一个自动生成的身份值

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2019-09-14
      • 2012-03-02
      • 2014-02-21
      • 1970-01-01
      相关资源
      最近更新 更多