Добрый день!
Есть такие данные, вопрос, как не склеивая запрос из кусков определять следующий вариант,
если группа полностью включена или выключена, поле "is_uses", то данное условие не учитывается, если частично, то учитывается.
-- Таблица с данными
CREATE TEMP TABLE IF NOT EXISTS _myTable(
id SERIAL PRIMARY KEY
, name text
, param_0 int
, param_1 int
, param_2 int
);
-- Таблица для хранения параметров фильтра
CREATE TEMP TABLE IF NOT EXISTS _myFilter(
id SERIAL PRIMARY KEY
, index_param int
, is_uses bool
, _value int8
);
-- Заполняем таблицу с данными
INSERT INTO _myTable(name, param_0, param_1, param_2) VALUES("test1_10_100", 1, 10 , 100);
INSERT INTO _myTable(name, param_0, param_1, param_2) VALUES("test2_10_101", 2, 10 , 101);
-- Заполняем таблицу фильтров
INSERT INTO _myFilter(index_param, is_uses, _value) SELECT 0, True, DISTINCT param_0 FROM _myTable;
INSERT INTO _myFilter(index_param, is_uses, _value) SELECT 1, True, DISTINCT param_1 FROM _myTable;
INSERT INTO _myFilter(index_param, is_uses, _value) SELECT 2, True, DISTINCT param_2 FROM _myTable;
-- Отключеем одно значение
UPDATE _myFilter SET is_uses = False WHERE index_param = 0 AND _value = 1;
--Получаем данные
SELECT t.*
FROM _myTable AS t
WHERE t.param_0 IN (SELECT _value FROM _myFilter WHERE index_param = 0 AND is_uses) --<???
AND t.param_1 IN (SELECT _value FROM _myFilter WHERE index_param = 1 AND is_uses)--<???
AND t.param_2 IN (SELECT _value FROM _myFilter WHERE index_param = 2 AND is_uses)--<???