Проверка нескольких и условий на основе динамического пользовательского ввода в хранимую процедуру в postgresql - PullRequest
0 голосов
/ 29 октября 2018

У меня есть таблица с данными, как показано ниже,

keyId att_id att_value
1     1      4
1     2      5
2     1      4

У меня есть вход для процедуры как json {"1":"4","2":"5"}.

Моя процедура должна вернуть мне keyId, который имеет оба (att_id = 1 и att_value = 4) и (att_id = 2 и att_value = 5). Таким образом, выходные данные этого ввода json должны быть только 1, а не 2, так как вторая пара значений ключа в json не выполняется. Есть ли способ динамически добавлять условия и внутри хранимой процедуры в postgresql.

1 Ответ

0 голосов
/ 29 октября 2018

Предполагая, что комбинация att_id,att_value на KeyId не имеет дубликатов, вы можете использовать GROUP BY и HAVING

SELECT  KeyID 
 FROM   t 
WHERE  ( att_id, att_value ) IN (SELECT inp.key :: INT, 
                                         inp.VALUE :: INT 
                                  FROM   json_each_text('{"1":"4","2":"5"}') AS 
                                         inp )
 GROUP BY  keyId HAVING COUNT(*) = 2;

Демо

...