选择ids Postgresql数组的公共元素

时间:2017-06-02 11:26:23

标签: postgresql

所以我要在Postgresql中解决这个问题,对于用户提供的给定数量的classId,我必须返回所述类的公共属性。

我有三个表来表示模型(一个类有多个属性,一个属性可以在很多类中)

表类:

---------------------------
| Id | Name | Description |
---------------------------

表格属性:

---------------------------
| Id | Name | Description |
---------------------------

最后表ClassProperties

------------------------
| ClassId | PropertyId | 
------------------------

所以用户给了我一个包含classIds的数组,我必须返回所有类的所有常用属性(如上所述)

截至目前,我只能使用以下代码返回所有类的所有属性:

select p.*
from properties as p
inner join ClassProperties as cp on cp.propertyid= p.id
where cp.classid = any ('{88d5fe8f-e19e-40b4-bc65-83ac64f825b0, a2a63bea-
aeee-4d3b-817e-cc635383c571}') ;

你可以看到的ids是Guid,但这确实无关紧要。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以这样做:

select p.*
from properties p inner join
      ClassProperties cp
      on cp.propertyid = p.id
where cp.classid = any ('{88d5fe8f-e19e-40b4-bc65-83ac64f825b0, a2a63bea-aeee-4d3b-817e-cc635383c571}')
group by p.id
having count(*) = 2;

如果允许重复,则count(*)应为count(distinct classid)

注意:值" 2"是您要检查的元素数量。您也可以使用array_length('{88d5fe8f-e19e-40b4-bc65-83ac64f825b0, a2a63bea-aeee-4d3b-817e-cc635383c571}')