подсчет строк в sqlite INSERT SELECT - PullRequest
1 голос
/ 02 декабря 2011

У меня есть две таблицы sqlite, где одна таблица имеет внешний ключ другого.

CREATE TABLE a (id INTEGER PRIMARY KEY NOT NULL, value TEXT UNIQUE NOT NULL);
CREATE TABLE b (id INTEGER PRIMARY KEY NOT NULL, a INTEGER REFERENCES a (id) NOT NULL, value TEXT NOT NULL);

Я делаю INSERT с SELECT в b.

INSERT INTO b (a, value) SELECT ?value, a.id FROM a WHERE a.value == ?a;

Как узнать, была ли вставлена ​​строка в b или нет?Выполнение SELECT для только что введенных значений и проверка их существования кажется довольно неэффективным.

1 Ответ

2 голосов
/ 03 декабря 2011

Надеюсь, функция changes () может вам помочь.

Функция changes () возвращает количество строк базы данных, которые были изменен или вставлен или удален самой последней выполненной вставкой, Оператор DELETE или UPDATE, исключая операторы нижнего уровня триггеры. SQL-функция changes () является оболочкой для sqlite3_changes () C / C ++ и, следовательно, следует тем же правилам для подсчет изменений.

Таким образом, change () возвращает 1, если строка была вставлена, и 0 в противном случае.

...