2017-06-02 3 views
0

So habe ich diese Aufgabe in PostgreSQL zu lösen, wo für eine bestimmte Anzahl von ClassIds, die der Benutzer bietet, ich ihm die gemeinsamen Eigenschaften der genannten Klassen zurückgeben muss.Wählen Sie gemeinsame Elemente eines Arrays von IDs PostgreSQL

Ich habe drei Tabellen, das Modell zu repräsentieren (eine Klasse hat mehrere Eigenschaften und eine Eigenschaft kann in vielen Klassen)

Tabelle Klassen:

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

Tabelleneigenschaften:

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

Und schließlich Tabelle ClassProperties

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

die Benutzer gibt mir ein Array mit ClassIDs, und ich habe ihm alle gängigen Eigenschaften aller Klassen zurückzukehren (wie ich oben gesagt)

Ab jetzt bin ich nur in der Lage sein jede Eigenschaft aller Klassen zurückkehren mit diesem Code:

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

Die IDs, wie Sie sehen können, sind Guid, aber das ist wirklich egal. Jede Hilfe wäre willkommen. Vielen Dank!

Antwort

0

Sie können dies tun, wie:

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; 

Die count(*) sollte count(distinct classid) sein, wenn Duplikate sind nicht zulässig.

Hinweis: Der Wert "2" ist die Anzahl der zu überprüfenden Elemente. Sie können auch array_length('{88d5fe8f-e19e-40b4-bc65-83ac64f825b0, a2a63bea-aeee-4d3b-817e-cc635383c571}') verwenden.

+0

Zunächst einmal vielen Dank für die schnelle Antwort. Wie stellen Sie Arrays in SQL? Ich dachte eigentlich, das war es, übrigens denke ich, ich vergaß zu sagen, dass dies in C# mit npgsql – w84m3

+0

@ w84m3 aufgerufen wird. . . Ich weiß nicht, was ich dachte. Ihre Syntax ist korrekt. –

Verwandte Themen