Динамическое предложение where на основе входных параметров в postgresql - PullRequest
0 голосов
/ 29 октября 2018

У меня есть параметр jsonb для моей процедуры plsql с данными {1 = 2,2 = 3}. Моя таблица содержит следующие данные,

att_name |att_key |att_value
abcd     |1       |2
bcde     |2       |3
efgh     |1       |3

Я хочу отфильтровать данные, где (att_key = 1 и att_value = 2) или (att_key = 2 и att_value = 3), которые должны генерироваться динамически на основе входных данных jsonb. Выходные данные будут содержать только abcd и bcde. Есть ли способ создать этот запрос динамически в postgresql.

1 Ответ

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

{1=2,2=3} не является допустимым JSON.

Я думаю, вы имеете в виду {"1":"2","2":"3"}.

Вы можете использовать json_each_text для преобразования в пару значений ключа (текст) и легко сравнивать.

SELECT * 
  FROM   t 
WHERE  ( att_key, att_value ) IN (SELECT inp.key :: INT, inp.VALUE :: INT 
     FROM   json_each_text('{"1":"2","2":"3"}') AS inp ); 

Демо

...