根据动态用户输入到postgresql中的存储过程检查多个和条件

Checking multiple and conditions based on dynamic user input to stored procedure in postgresql

我有一个 table 数据如下,

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

我对程序的输入是 json {"1":"4","2":"5"}

我的程序应该 return 我的 keyId 具有 (att_id = 1 和 att_value = 4) 和 (att_id=2 和 att_value=5).所以这个 json 输入的输出应该只有 1 而不是 2 因为 json 中的第二个键值对不满足。有什么方法可以在 postgresql 的存储过程中动态附加和条件。

假设每个 KeyId 的 att_id,att_value 组合没有重复项,您可以使用 GROUP BYHAVING

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;

Demo