У меня есть эта таблица, где я храню несколько идентификаторов и возрастной диапазон (def1, def2)
CREATE TABLE "template_requirements" (
"_id" INTEGER NOT NULL,
"templateid" INTEGER,
"def1" VARCHAR(255),
"def2" VARCHAR(255),
PRIMARY KEY("_id")
)
Имея такие значения, как:
templateid | def1 | def2
-------------------------------
100 | 7 | 25
200 | 40 | 90
300 | 7 | 25
300 | 40 | 60
Как вы видите для templateid 300
, у нас есть логика или: возраст от 7 до 25 или возраст от 40 до 60.
Я хочу получить все идентификаторы шаблонов, которые не для определенного age
, например, 25 ...
В чем проблема?
Если я выполню запрос, подобный этому:
SELECT group_concat(templateid)
FROM template_requirements
where 1=1 and '25' not between cast(def1 as integer)
and cast(def2 as integer)
он возвращает 200, 300, что неверно, так как 300 соответствует строке 40–60, но не должно включаться в результат, поскольку у нас есть условие с тем же шаблоном от 7 до 25, в котором не выполняется промежуточный элемент.
Каким будет правильный запрос в SQLite, я бы хотел сохранить материал group_concat.