Можно ли объединить или улучшить эти три ВСТАВКИ SQLITE? - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть три таблицы:

CREATE TABLE "local" ("id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "serialNumber" TEXT, "location" TEXT)

CREATE TABLE "setups" ("id" INTEGER PRIMARY KEY  NOT NULL ,"hold" TEXT,"mode" INTEGER,"setTemp" REAL,"maxSTemp" REAL,"minSTemp" REAL,"units" TEXT,"heat" INTEGER,"heatMode" INTEGER,"fanMode" INTEGER,"fan" INTEGER,"cool" INTEGER)

CREATE TABLE "data" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,"humidity" REAL,"time" INTEGER,"filtChng" INTEGER,"indoorTemp" REAL,"outdoorTemp" REAL, "setups_id" INTEGER, "local_id" INTEGER)

Каждый раз, когда я получаю новую запись, я выполняю:

INSERT INTO local ('serialNumber') SELECT 'XXXX' WHERE NOT EXISTS (SELECT * FROM local WHERE serialNumber='XXXX')"

INSERT INTO setups ('hold','mode','setTemp','maxSTemp','minSTemp','units','heat','heatMode','fanMode','fan','cool') SELECT '00',1,74.0,74.0,74.0,'F',1,1,1,1,1 WHERE NOT EXISTS (SELECT * FROM setups WHERE hold='00' AND mode=1 AND setTemp=74.0 AND maxSTemp=74.0 AND minSTemp=74.0 AND units='F' AND heat=1 AND heatMode=1 AND fanMode=1 AND fan=1 AND cool=1)

 INSERT INTO data ('humidity','filtChng','time','indoorTemp','outdoorTemp',local_id,setups_id) SELECT 74.0,111111111,100,74.0,74.0,local.id,setups.id FROM local CROSS JOIN setups WHERE local.serialNumber='XXXX' AND setups.hold='00' AND setups.mode=1 AND setups.setTemp=74.0 AND setups.maxSTemp=74.0 AND setups.minSTemp=74.0 AND setups.units='F' AND setups.heat=1 AND setups.heatMode=1 AND setups.fanMode=1 AND setups.fan=1 AND setups.cool=1

То, что я делаю, работает, но кажется медленным и избыточным / неэффективным ...

1 Ответ

0 голосов
/ 21 февраля 2011

Ну, вы можете удалить часть «где не существует» из «локальной» вставки, если вы используете уникальное ограничение для поля «serialNumber».Будьте осторожны, это вызовет нарушение ограничения вместо того, чтобы просто не вставлять строку.Так что обязательно обращайтесь с этим в приложении.

И хотя я предполагаю, что это так, убедитесь, что проверка на наличие дубликатов действительно необходима в вашем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...