Как получить вставленные строки дБ sqlite - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть 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 также.

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

В SQLite нет предложения RETURNING или чего-то подобного, и он не допускает INSERT в 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;

Если во вставленных значениях есть дубликаты ... Я не знаю, как решить.

1 голос
/ 04 февраля 2020

Я не думаю, что это возможно в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...