Задать вопрос
@firstmixon

Проверка связывания таблиц, как проверить?

Добрый день!
Есть такие данные, вопрос, как не склеивая запрос из кусков определять следующий вариант,
если группа полностью включена или выключена, поле "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)--<???
  • Вопрос задан
  • 41 просмотр
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы