【问题标题】:How to get inserted rows db sqlite如何获取插入的行 db sqlite
【发布时间】:2020-02-04 09:44:59
【问题描述】:

我有这个 sql 查询

INSERT INTO profile (title, value, account_id) 
VALUES
(5, 'Wass', "wewewewwew"), -- HOMETOWN
(6, 'sadas', "sdsdadkf"), -- HOMETOWN
returning account_id AS result;

我需要将它转换为 sqlite,这就是我所做的

INSERT INTO `public.profile` (title, value, account_id) 
VALUES
(5, 'Wass', "wewewewwew"), -- HOMETOWN
(6, 'sadas', "sdsdadkf"), -- HOMETOWN

但我也需要在 sqlite 查询中返回列。

谢谢

【问题讨论】:

    标签: android sql sqlite


    【解决方案1】:

    SQLite 没有 RETURNING 子句或类似的东西,并且它不允许在 CTE 中插入。

    所以唯一的解决方案是通过刚刚插入的值来选择:

    INSERT INTO public.profile (title, value, account_id) 
    VALUES
    (5, 'Wass', "wewewewwew"),
    (6, 'sadas', "sdsdadkf");
    
    SELECT id 
    FROM public.profile
    WHERE (title, value, account_id) IN ( (5, 'Wass', "wewewewwew"),
                                          (6, 'sadas', "sdsdadkf") );
    

    当然,这需要根据索引将插入的全部数据或其中的一部分定义为唯一。

    如果没有这样的唯一约束(即某些插入的数据可能与表中已经存在的数据完全重复),但插入的值中没有这样的重复,您可以使用

    INSERT INTO public.profile (title, value, account_id) 
    VALUES
    (5, 'Wass', "wewewewwew"),
    (6, 'sadas', "sdsdadkf");
    
    SELECT MAX(id) id
    FROM public.profile
    WHERE (title, value, account_id) IN ( (5, 'Wass', "wewewewwew"),
                                          (6, 'sadas', "sdsdadkf") )
    GROUP BY title, value, account_id;
    

    如果插入的值有重复...不知道怎么解决。

    【讨论】:

    【解决方案2】:

    我认为这在 Sqlite 中是不可能的。但是您可以使用 last_insert_rowid() 来返回最后插入记录的 ROWID

    select last_insert_rowid();
    

    对于最后插入的 account_id:

    select account_id from profile where rowid=last_insert_rowid();
    

    对于所有插入的 account_id:

    select account_id from profile;
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      相关资源
      最近更新 更多