有没有比多相交更有效的选择数据的方法SQL

Is there a more efficient way of selecting the data than multiple intersects SQL

我的 PostgreSQL 数据库中有以下格式的数据

answer_id    question_id    country_id    answer
    1             1              1           7
    2             1              2           7
    3             1              3           5
    4             2              1           3
    5             2              2           2    
    6             2              3           2  

我想做的是得到所有对某个国家有特定答案的国家,我们可以有多个问题~答案组合。 例如,我可能需要所有对问题 1 有 7 个答案(2 个值)的国家,但随后,连同第一个条件)我还添加了问题 2 的答案是 2,现在它从 2 个值下降(以下国家/地区) ids 1 和 2) 到只有 1(国家 id 2)。

现在我已经成功地用相交做到了,如下所示...

select country_id from answer_table where question_id = 1 and answer = 7
intersect 
select country_id from answer_table where question_id = 2 and answer = 2

问题 是我需要能够动态地执行此操作,这意味着有一次我可能 select 只有 1 个问题~答案对,但其他时候我可能需要更多(3、5、7 或其他),这会影响 select 的数量(进而相交)。

我的意思是上面的方法有效,而且我确实有能力使用查询生成器,所以生成它真的没什么大不了的,但我不认为这是最有效也不是最聪明的方法。

因此,我的问题基本上是有没有一种更有效或更智能的方式来动态地执行这些 selects/intersects(比如获取数据数组或其他内容的函数?)?

谢谢你,祝你玩得开心!

p.s。我找到了 堆栈线程,但它们始终使用固定的 5 个查询。

我不知道它是否更有效,但你可能会发现它更通用:

select country_id from answer_table
where (question_id, answer) in ( (1, 7), (2, 2) )
group by country_id
having count(distinct (question_id, answer) ) = 2;

实际上你可以用数组函数替换in列表和“2”来传递数组值。