2017-06-02 16 views
0

私はPostgreSQLで解決するタスクがあります。ここでは、ユーザーが提供するclassIdsの数に対して、そのクラスの共通プロパティを返す必要があります。idsの配列の共通要素を選択するPostgresql

は私がモデルを表現するための3つのテーブルを持っている(1クラスには、複数のプロパティを持っており、一つの特性は、多くのクラスにあることができる)

表クラス:

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

テーブルプロパティ:

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

そして最後にテーブルのクラス特性

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

だからユーザーは私のclassidの配列を与え、私は(私は上記の言ったように)

は、今のところ私はすべてのクラスのすべてのプロパティを返すことができることだ彼にすべてのクラスのすべての一般的な性質を返す必要が

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}') ; 

私が見ることのできるIDはGuidですが、それは本当に問題ではありません。どんな助けもありがとう。ありがとう!

答えて

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}')も使用できます。

+0

まず最初に、高速応答に感謝します.2番目にどのようにsqlで配列を表しますか?私は実際にそれがそれだと思ったが、これはnpgsqlでC#で呼び出すつもりだと忘れたと思う。 – w84m3

+0

@ w84m3。 。 。私は何を考えていたのか分かりません。あなたの構文は正しいです。 –

関連する問題